scipy 笔记:scipy.spatial.distance
1 pdist
计算n维空间中观测点之间的成对距离。
scipy.spatial.distance.pdist(X, metric='euclidean', *, out=None, **kwargs)
1.1 主要参数
X | 一个m行n列的数组,表示n维空间中的m个原始观测点 |
metric | 使用的距离度量 |
out | 输出数组。如果非空,压缩的距离矩阵Y将存储在此数组中 |
1.2 举例
import numpy as np
from scipy.spatial.distance import pdistx = np.array([[2, 0, 2], [2, 2, 3], [-2, 4, 5], [0, 1, 9], [2, 2, 4]])
#5个元素,每个元素3维pdist(x)
#array([2.23606798, 6.40312424, 7.34846923, 2.82842712, 4.89897949,6.40312424, 1. , 5.38516481, 4.58257569, 5.47722558])
'''
10个元素,分别表示:第1个点和第2个点之间的距离
第1个点和第3个点之间的距离
第1个点和第4个点之间的距离
第1个点和第5个点之间的距离
第2个点和第3个点之间的距离
第2个点和第4个点之间的距离
第2个点和第5个点之间的距离
第3个点和第4个点之间的距离
第3个点和第5个点之间的距离
第4个点和第5个点之间的距离
'''
2 cdist
计算两个输入集合中每对元素之间的距离
scipy.spatial.distance.cdist(XA, XB, metric='euclidean', *, out=None, **kwargs)
2.1 主要参数
XA | mA*n的矩阵,表示mA个元素,每个元素n维特征 |
XB | mBn的矩阵,表示mB个元素,每个元素n维特征 |
metric | 使用的距离度量 |
out | 输出数组(mA*mB)。如果非空,压缩的距离矩阵Y将存储在此数组中 |
2.2 举例
import numpy as np
from scipy.spatial.distance import cdistx = np.array([[2, 0, 2], [2, 2, 3], [-2, 4, 5], [0, 1, 9], [2, 2, 4]])cdist(x,x)
'''
array([[0. , 2.23606798, 6.40312424, 7.34846923, 2.82842712],[2.23606798, 0. , 4.89897949, 6.40312424, 1. ],[6.40312424, 4.89897949, 0. , 5.38516481, 4.58257569],[7.34846923, 6.40312424, 5.38516481, 0. , 5.47722558],[2.82842712, 1. , 4.58257569, 5.47722558, 0. ]])
'''y=[[1,2,3]]
cdist(x,y)
'''
array([[2.44948974],[1. ],[4.12310563],[6.164414 ],[1.41421356]])
'''cdist(y,x)
'''
array([[2.44948974, 1. , 4.12310563, 6.164414 , 1.41421356]])
'''
3 squareform
将距离向量的向量形式转换为方阵形式的距离矩阵,反之亦然。
scipy.spatial.distance.squareform(X, force='no', checks=True)
3.1 举例
import numpy as np
from scipy.spatial.distance import *x = np.array([[2, 0, 2], [2, 2, 3], [-2, 4, 5], [0, 1, 9], [2, 2, 4]])dist_vec=pdist(x)
dist_vec
'''
array([2.23606798, 6.40312424, 7.34846923, 2.82842712, 4.89897949,6.40312424, 1. , 5.38516481, 4.58257569, 5.47722558])
'''dist_mat=squareform(dist_vec)
dist_mat
'''
array([[0. , 2.23606798, 6.40312424, 7.34846923, 2.82842712],[2.23606798, 0. , 4.89897949, 6.40312424, 1. ],[6.40312424, 4.89897949, 0. , 5.38516481, 4.58257569],[7.34846923, 6.40312424, 5.38516481, 0. , 5.47722558],[2.82842712, 1. , 4.58257569, 5.47722558, 0. ]])
'''squareform(dist_mat)
'''
array([2.23606798, 6.40312424, 7.34846923, 2.82842712, 4.89897949,6.40312424, 1. , 5.38516481, 4.58257569, 5.47722558])
'''
4 directed_hausdorff
- 计算两个二维数组之间的定向豪斯多夫距离
- 通常用于衡量两个点集合的相似性
scipy.spatial.distance.directed_hausdorff(u, v, seed=0)
数学笔记/scipy 笔记:豪斯多夫距离(Hausdorff )_python 豪斯多夫距离-CSDN博客
4.1 主要参数
u | (M,N)大小的数组 M 表示点的数量,N 表示每个点的维度 |
v | (O,N)大小的数组 O 表示点的数量,N 表示每个点的维度 |
4.2 返回内容
d | u 和 v 之间的定向豪斯多夫距离 |
index_1 | 在数组u 中贡献豪斯多夫对的点的索引 |
index_2 | 在数组v 中贡献豪斯多夫对的点的索引 |
4.3 举例
import numpy as np
from scipy.spatial.distance import *u = np.array([(1.0, 0.0),(0.0, 1.0),(-1.0, 0.0),(0.0, -1.0)])
v = np.array([(2.0, 0.0),(0.0, 2.0),(-2.0, 0.0),(0.0, -4.0)])directed_hausdorff(u,v)
#(2.23606797749979, 3, 0)
5 is_valid_dm
判断输入数组是否为有效的距离矩阵
scipy.spatial.distance.is_valid_dm(D, tol=0.0, throw=False, name='D', warning=False)
5.1 主要参数
D | 用于测试有效性的候选对象 |
tol | 距离矩阵应该是对称的。tol是条目ij和ji之间的最大差异,以便将距离度量视为对称 |
5.2 举例
import numpy as np
from scipy.spatial.distance import *d = np.array([[0.0, 1.1, 1.2, 1.3],[1.1, 0.0, 1.0, 1.4],[1.2, 1.0, 0.0, 1.5],[1.3, 1.4, 1.5, 0.0]])
is_valid_dm(d)
#Trueis_valid_dm([[0, 2, 2], [2, 0, 2]])
#形状不对is_valid_dm([[0, 1, 1], [1, 2, 3], [1, 3, 0]])
#对角线不为0is_valid_dm([[0, 1, 3], [2, 0, 1], [3, 1, 0]])
#不对称
6 is_valid_y
scipy.spatial.distance.is_valid_y(y, warning=False, throw=False, name=None)
判断输入数组是否为有效的压缩距离矩阵。
压缩距离矩阵必须是1维的numpy数组。它们的长度必须是一些正整数n的二项系数
6.1 主要参数
y | 压缩距离矩阵 |
6.2 举例
import numpy as np
from scipy.spatial.distance import *is_valid_y([1.0, 1.2, 1.0, 0.5, 1.3, 0.9])
#True
#长度为6,合理长度,所以返回Trueis_valid_y([1.0, 1.2, 1.0, 0.5, 1.3, 0.9,1.5])
#False
#长度为7,不合理长度,所以返回False
7 两个数字向量之间的距离
7.1 braycurtis
计算两个一维数组之间的布雷-柯蒂斯距离
scipy.spatial.distance.braycurtis(u, v, w=None)
7.1.1 主要参数
u | (N,) 输入数组 |
v | (N,) 输入数组 |
w | (N,) u和v中每个值的权重 |
7.1.2 举例
基本上后面都是一样的,就不举例了
import numpy as np
from scipy.spatial.distance import *braycurtis([1,1,0],[0,1,0])#0.3333333333333333
7.2 canberra
scipy.spatial.distance.canberra(u, v, w=None)
7.3 chebyshev
scipy.spatial.distance.chebyshev(u, v, w=None)
7.4 cityblock
曼哈顿距离
scipy.spatial.distance.cityblock(u, v, w=None)
7.5 correlation
scipy.spatial.distance.correlation(u, v, w=None, centered=True)
7.6 cosine
scipy.spatial.distance.cosine(u, v, w=None)
7.7 euclidean
scipy.spatial.distance.euclidean(u, v, w=None)
7.8 jensenshannon
scipy.spatial.distance.jensenshannon(p, q, base=None, *, axis=0, keepdims=False)
两个概率向量p,q之间的JS距离
如果p和q的总和不为1.0,该程序将对其进行归一化
7.8.1 主要参数
p | 左侧概率向量 |
q | 右侧概率向量 |
base | 用于计算输出的对数底数 |
axis | 沿着哪个轴计算JS距离 |
7.8.2 举例
import numpy as np
from scipy.spatial.distance import *jensenshannon([1.0, 0.0, 0.0], [0.0, 1.0, 0.0])
#0.8325546111576977jensenshannon([1.0, 0.0, 0.0], [0.0, 1.0, 0.0],2)
#1.0a = np.array([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12]])
b = np.array([[13, 14, 15, 16],[17, 18, 19, 20],[21, 22, 23, 24]])
jensenshannon(a, b, axis=0)
#array([0.19542878, 0.14476971, 0.11383771, 0.09276358])jensenshannon(a, b, axis=1)
#array([0.14023394, 0.03991063, 0.02018153])
7.9 mahalanobis
马氏距离
scipy.spatial.distance.mahalanobis(u, v, VI)
7.9.1 主要参数
u | 输入向量 |
v | 输入向量 |
VI | 协方差矩阵的逆,也即上面公式中的 |
7.9.2 举例
import numpy as np
from scipy.spatial.distance import *iv = [[1, 0.5, 0.5], [0.5, 1, 0.5], [0.5, 0.5, 1]]mahalanobis([1, 0, 0], [0, 1, 0], iv)
#1.0
7.10 minkowski
闵可夫斯基距离
scipy.spatial.distance.minkowski(u, v, p=2, w=None)
7.11 seuclidean
标准欧氏距离
scipy.spatial.distance.seuclidean(u, v, V)
V[i]是针对点集中所有第i个分量计算得到的方差
7.12 sqeuclidean
平方欧氏距离
scipy.spatial.distance.sqeuclidean(u, v, w=None)
8 两个布尔向量距离
8.1 dice
scipy.spatial.distance.dice(u, v, w=None)
CTF表示u是T,v是F,其他类似
8.2 hamming
scipy.spatial.distance.hamming(u, v, w=None)
8.3 jaccard
scipy.spatial.distance.jaccard(u, v, w=None)
8.4 kulczynski1
scipy.spatial.distance.kulczynski1(u, v, *, w=None)
8.5 rogerstanimoto
scipy.spatial.distance.rogerstanimoto(u, v, w=None)
8.6 russellrao
8.7 sokalmichener
scipy.spatial.distance.sokalmichener(u, v, w=None)
8.8 sokalsneath
scipy.spatial.distance.sokalsneath(u, v, w=None)
8.9 yule
scipy.spatial.distance.yule(u, v, w=None)
相关文章:

scipy 笔记:scipy.spatial.distance
1 pdist 计算n维空间中观测点之间的成对距离。 scipy.spatial.distance.pdist(X, metriceuclidean, *, outNone, **kwargs) 1.1 主要参数 X一个m行n列的数组,表示n维空间中的m个原始观测点metric使用的距离度量out输出数组。如果非空,压缩的距离矩阵…...
java video audio encoder
引言 在现代互联网的时代,视频和音频已经成为人们生活中不可或缺的一部分。而在计算机科学中,视频和音频编码器则是将原始的视频和音频数据转换为可压缩格式的关键技术。在本文中,我们将探讨基于Java的视频和音频编码器的使用。 什么是视频…...
TypeScript 中声明类型的方法
1、使用:运算符来为变量和函数参数指定类型。例如: let num: number 5; function add(a: number, b: number): number {return a b; }2、使用 type 关键字来声明自定义类型别名。例如: type Point {x: number;y: number; };3、使用 interface 关键字…...

显示器校准软件BetterDisplay Pro mac中文版介绍
BetterDisplay Pro mac是一款显示器校准软件,可以帮助用户调整显示器的颜色和亮度,以获得更加真实、清晰和舒适的视觉体验。 BetterDisplay Pro mac软件特点 - 显示器校准:可以根据不同的需求和环境条件调整显示器的颜色、亮度和对比度等参数…...
Element UI 走马灯 实现鼠标滚动切换页面
鼠标滚动切换页面 elementui Carousel 走马灯鼠标滚轮事件实现 一、在轮播图外的盒子外添加鼠标滚轮事件,触发GoWheel函数。 wheel"goWheel"二、通过判断deltaY的数值来触发相应事件 它检查滚轮事件的deltaY属性是否大于0 event.deltaY当鼠标滚轮向下…...
在Docker上部署Springboot项目
在Docker上部署Springboot项目 ###1.安装docker 2.安装mysql 拉 Mysql 镜像 docker pull mysql:5.7.31运行 Mysql 5.7.31 第一次运行需要设置密码 docker run -d --name myMysql -p 9506:3306 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD1234 mysql:5.7.31不是…...
2024中国眼博会,全国眼康与眼镜品牌加盟展会,北京眼健康展
立足北京,面向全球,2024第六届CEYEE中国眼博会,将以大规模的展览面积在4月与您相会; ——春天是万物复苏的季节,更是企业开拓市场,抓住春季发展机遇的重要时节;第六届CEYEE中国眼博会将在2024年…...
C++学习 --谓词
目录 1, 什么是谓词 1-1, 一元谓词 1-2, 二元谓词 1, 什么是谓词 返回bool类型的仿函数, 叫着谓词, 分为一元谓词和二元谓词 1-1, 一元谓词 operator()接收一个参数,叫着一元谓…...
Arkts深入了解运用 LazyForEach【鸿蒙专栏-17】
文章目录 深入了解 LazyForEach:数据懒加载LazyForEach概述接口描述IDataSource接口DataChangeListener接口使用限制和注意事项键值生成规则和组件创建规则首次渲染键值相同时错误渲染键值生成规则和组件创建规则首次渲染键值相同时错误渲染键值生成规则和组件创建规则首次渲染…...

如何让你的 Jmeter+Ant 测试报告更具吸引力?
引言 想象一下,你辛苦搭建了一个复杂的网站,投入了大量的时间和精力进行开发和测试。当你终于完成了测试并准备生成测试报告时,你可能会发现这个过程相当乏味,而对于其他人来说,它可能也不那么吸引人。 但是…...
游戏APP接入哪些广告类型
当谈到游戏应用程序(APP)接入广告时,选择适合用户体验和盈利的广告类型至关重要。游戏开发者通常考虑以下几种广告类型: admaoyan猫眼聚合 横幅广告: 这些广告以横幅形式显示在游戏界面的顶部或底部。它们不会打断游戏…...

Echarts地图registerMap使用的GeoJson数据获取
https://datav.aliyun.com/portal/school/atlas/area_selector 可以选择省,市,区。 也可以直接在地图上点击对应区域。 我的应用场景 我这里用到这个还是一个特别老的大屏项目,用的jq写的。显示中国地图边界区域 我们在上面的这个地区选择…...

【JavaEE】Java中的多线程 (Thread类)
作者主页:paper jie_博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JavaEE》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&…...
python中具名元组的使用
collections.namedtuple是一个工厂函数,它可以用来构建一个带字段名的元组和一个有名字的类。 from collections import namedtuple City namedtuple(City2, name country population coordinates) tokyo City(Tokyo, JP, 36.933, (35.689722, 139.691667)) pr…...
【开题报告】基于SpringBoot的婚纱店试妆预约平台的设计与实现
1.选题背景 婚礼是人生中的重要时刻,而试妆是婚礼准备过程中不可或缺的一环。传统的婚纱店试妆预约方式通常需要亲自到店或通过电话预约,这样的方式可能存在一些问题。首先,用户需要花费时间和精力到店进行预约,对于忙碌的现代人…...
Qt 布局讲解及举例
Qt布局是一个用于管理窗口部件位置和大小的机制,它使得开发人员能够轻松地创建可伸缩、可调整大小的界面。在Qt中,布局管理器是一种用于自动调整窗口部件大小的机制,它可以根据窗口大小的变化自动调整部件的位置和大小。 Qt布局管理器通过使…...

【微服务】java 规则引擎使用详解
目录 一、什么是规则引擎 1.1 规则引擎概述 1.2 规则引擎执行过程 二、为什么要使用规则引擎 2.1 使用规则引擎的好处 2.1.1 易于维护和更新 2.1.2 增强应用程序的准确性和效率 2.1.3 加快应用程序的开发和部署 2.1.4 支持可视化和可管理性 2.2 规则引擎使用场景 三、…...

HCIA-Datacom跟官方路线学习
通过两次更换策略。最后找到最终的学习方案,华为ICT官网有对这个路线的学习,hcia基础有这个学习路线,hcip也有目录路线。所以,最后制定学习路线,是根据这个认证的路线进行学习了: 官网课程:课程…...

MySQL三大日志详细总结(redo log undo log binlog)
MySQL日志 包括事务日志(redolog undolog)慢查询日志,通用查询日志,二进制日志(binlog) 最为重要的就是binlog(归档日志)事务日志redolog(重做日志)undolog…...

XXL-Job详解(二):安装部署
目录 前言环境下载项目调度中心部署执行器部署 前言 看该文章之前,最好看一下之前的文章,比较方便我们理解 XXL-Job详解(一):组件架构 环境 Maven3 Jdk1.8 Mysql5.7 下载项目 源码仓库地址链接: https://github.…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...

通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...