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 主要参数

XAmA*n的矩阵,表示mA个元素,每个元素n维特征
XBmBn的矩阵,表示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 返回内容

duv 之间的定向豪斯多夫距离
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的二项系数C_n^2

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协方差矩阵的逆,也即上面公式中的V^{-1}

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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/217293.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot实现学生成绩管理系统项目【项目源码+论文说明】

基于springboot实现学生成绩管理系统演示 摘要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生&am…

IDEA中JDK21控制台打印的中文乱码

IDEA中,使用的JDK21,控制台打印中文乱码,解决办法是重装了一下JDK。 我之前安装的版本是“jdk-21_windows-x64_bin.exe”,我配置了多个JDK环境,所以使用的是安装文件进行安装的。这次解决乱码问题,我重新安…

禁止指定电脑程序运行的2种方法

你可能要问了,为什么要禁止电脑程序运行呢,因为有的公司要净化公司的工作环境,防止某些刺头员工在公司电脑上瞎搞。也有部分家长,是为了防止自己家的孩子利用电脑乱下载东西。 今天就分享2种禁止指定电脑程序运行的方法&#xff1…

微信小程序-跳转到另一个小程序

微信小程序-跳转到另一个小程序 微信小程序跳转到另一个小程序有一个条件:这两个小程序被同一个微信公众号关联,否则不能跳转,会报错。 官方文档 wx.navigateToMiniProgram({appId: wxa38r249405b957c6,path: pages/splash/index,//extraData: 需要传递…

电子学会C/C++编程等级考试2022年03月(二级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:温度统计 现有一段时间的温度数据,请统计指定温度出现的次数。 时间限制:1000 内存限制:65536输入 第一行一个整数n,表示温度数据的个数。(0 < n ≤ 200) 第二行n个整数,以空格分隔,每个整数表示一个温度,温度的范围大…

如何开发有趣而富有创意的营销小游戏

在数字化时代&#xff0c;企业通过创意而独特的方式与目标受众互动&#xff0c;已成为提高品牌知名度和用户参与度的重要手段之一。其中&#xff0c;设计一款引人入胜的营销小游戏&#xff0c;不仅能吸引用户的眼球&#xff0c;还能有效传达品牌信息。以下是一些建议&#xff0…

ubuntu22.04中ros2 安装rosbridge

ros2 启动rosbridge&#xff1a; 要启动ROS2中的rosbridge&#xff0c;需要先安装ROS2的rosbridge_suite软件包。使用以下命令安装&#xff1a; 更新过可忽略 sudo apt-get update安装命令 sudo apt-get install ros--rosbridge-suite 注意&#xff1a; 将替换为正在使用的R…

超详细!|优化算法性能测试标准及代码实现

由于有许多同学对我之前所用的优化算法测试函数的来源及其内容并不清楚&#xff0c;这里作者就给大家整理了5大常用的CEC测试函数集相关内容及其代码实现&#xff0c;当然作者能力有限&#xff0c;若有不当之处也希望与各位一起讨论交流&#xff0c;一起进步。 以上 处理优化…

【LeetCode:2824. 统计和小于目标的下标对数目 | 模拟+二分】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

广告屏LED屏断电检测远程控制开关方案应用钡铼技术S270

广告屏LED屏断电检测&#xff1a; 广告屏和LED屏在商业和公共场所的广泛应用中扮演着重要角色&#xff0c;但由于断电问题可能导致广告屏无法正常显示&#xff0c;进而影响广告宣传效果和客户体验。而S270作为一种高效稳定的远程控制开关&#xff0c;可以实现广告屏LED屏的断电…

Android : PopupWindow 悬浮框_简单应用

示例图&#xff1a; MainActivity.java package com.example.popupwindow;import androidx.appcompat.app.AppCompatActivity;import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.LayoutInflat…

HCIA-RS基础-距离矢量路由协议

前言&#xff1a; 动态路由协议根据寻径方式可以分为距离矢量路由协议和链路状态路由协议。本文将详细介绍距离矢量路由协议的原理&#xff0c;并阐述其中一个重要概念——路由环路&#xff0c;同时介绍如何避免路由环路的方法。通过学习本文&#xff0c;您将能够深入理解距离矢…