计算两个点集合之间的最小距离的一些函数

scipy.spatial.distance.cdist函数

scipy.spatial.distance.cdist(XA, XB, metric=‘euclidean’, p=None, V=None, VI=None, w=None),该函数用于计算两个输入集合的距离,通过metric参数指定计算距离的不同方式得到不同的距离度量值

metric的常见取值如下:
chebyshev:切比雪夫距离
correlation:相关系数
cosine:余弦夹角
euclidean:欧式距离
hamming:汉明距离
mahalanobis:马氏距离
seuclidean:标准化欧式距离

常见的欧氏距离计算:

In [1]: from scipy.spatial.distance import cdist
   ...: import numpy as np
   ...: x1 =np.array([(1,3),(2,4),(5,6)])
   ...: x2 =[(3,7),(4,8),(6,9)]
   ...: cdist(x1,x2,metric='euclidean')
   ...:
Out[1]:
array([[ 4.47213595,  5.83095189,  7.81024968],
       [ 3.16227766,  4.47213595,  6.40312424],
       [ 2.23606798,  2.23606798,  3.16227766]])

解析上述计算过程:结果数组中的第一行数据表示的是x1数组中第一个元素点与x2数组中各个元素点的距离,计算两点之间的距离
以点(1,3)与(3,7)点的距离为例:

In [2]: np.power((1-3)**2 +(3-7)**2,1/2)
Out[2]: 4.4721359549995796

NumPy中的array.shape函数

shape函数返回的是一个元组,表示数组(矩阵)的维度
对于一个二维矩阵a, a.shape返回的元组表示该数组的行数与列数,请看下例:

>>> a=np.array([[1,2],[3,4]])  
>>> a
array([[1, 2],
       [3, 4]])
>>> a.shape
(2L, 2L)

NumPy中numpy.argsort函数

argsort函数返回的是数组值从小到大的索引值
Examples

    # 一维数组
    >>> x = np.array([3, 1, 2])
    >>> np.argsort(x)
    array([1, 2, 0])
    
    # 二维数组 
    >>> x = np.array([[0, 3], [2, 2]])
    >>> x
    array([[0, 3],
           [2, 2]])
    
    >>> np.argsort(x, axis=0) #按列排序
    array([[0, 1],
           [1, 0]])
    
    >>> np.argsort(x, axis=1) #按行排序
    array([[0, 1],
           [0, 1]])

NumPy中数组array.min函数

如果没有参数min()返回一个标量,如果有参数0表示沿着列,1表示沿着行

>>> a=np.array([[1,2],[3,4]])  
>>> a.min()
1

>>> a.min(0)
array([1,2])

>>> a.min(1)
array([1,3])

NumPy中numpy.argmin函数

numpy.argmin表示最小值在数组中所在的位置索引

a = np.array([[1,2], [3,4]])
b = np.argmin(a)
结果:0

# 若有重复只显示第一个最小值的位置
a =  np.array([[0, 0, 1], [2, 3, 4]])
b = np.argmin(a)
结果:0

若添加axis这个参数,则表示求在行或者列方向上的最小值索引
axis=0 表示列方向上的最小值索引,axis=1表示行方向的最小值索引

a =np.array([[1, 0, 3], [2, 3, 1]])
b = np.argmin(a, axis=0)
结果:[0, 0, 1] 

a = np.array([[1, 0, 3], [2, 3, 1]])
b = np.argmin(a, axis=1)
结果:[1, 2] 

NumPy中numpy.argmax函数

numpy.argmax(a, axis=None, out=None) :返回沿轴axis最大值的索引
Parameters:
a : array_like :数组
axis : int:(可选)默认情况下,索引的是平铺的数组,否则沿指定的轴。
out : array:(可选)如果提供,结果以合适的形状和类型被插入到此数组中。

a = np.array([[1,2], [3,4]])
b = np.argmax(a)
结果:3

# 若有重复只显示第一个最大值的位置
a =  np.array([[0, 4, 1], [2, 3, 4]])
b = np.argmin(a)
结果:1

若添加axis这个参数,则表示求在行或者列方向上的最大值索引
axis=0 表示列方向上的最大值索引,axis=1表示行方向的最大值索引

a =np.array([[1, 0, 3], [2, 3, 1]])
b = np.argmax(a, axis=0)
结果:[1, 1, 0] 

a = np.array([[1, 0, 3], [2, 3, 1]])
b = np.argmin(a, axis=1)
结果:[2, 1] 
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Matlab可以计算集合之间距离。通常情况下,集合之间距离可以定义为它们之间最小距离,即两个集合中最近元素之间距离。 在Matlab中,可以使用`pdist2`函数计算两个集合之间最小距离。例如,要计算两个集A和B之间最小距离,可以使用以下代码: ```matlab A = [1, 2; 3, 4; 5, 6]; B = [7, 8; 9, 10]; D = pdist2(A, B); d = min(min(D)); ``` 其中,`A`和`B`分别表示两个集,`pdist2`函数计算A和B之间距离矩阵D,`min(min(D))`表示计算D矩阵中的最小值,即A和B之间最小距离。需要注意的是,`pdist2`函数的输入必须是矩阵形式,因此需要将集A和B表示为矩阵的形式。 同样地,可以使用`pdist2`函数计算两个复数集合之间最小距离。例如,要计算一个复数集合S1和一个复数圆集合S2之间最小距离,可以使用以下代码: ```matlab syms z real S1 = abs(z) < 1; S2 = abs(z - 1i) == 2; a = solve(S2, z); D = pdist2(double(a), double(solve(S1, z))); d = min(min(D)); ``` 在上述代码中,首先使用符号变量z定义两个复数集合S1和S2,其中S1表示所有绝对值小于1的复数,S2表示所有到1i的距离等于2的复数。然后使用`solve`函数求解方程组`S2`,得到一个符号解表达式a,其中包含了所有满足条件的复数的解。接着使用`double`函数将符号解表达式a和S1分别计算为数值解,并使用`pdist2`函数计算它们之间距离矩阵D。最后,计算D矩阵中的最小值d,即S1和S2之间最小距离
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值