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

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

  • scipy.spatial.distance.cdist函数
  • NumPy中的array.shape函数
  • NumPy中numpy.argsort函数
  • NumPy中数组array.min函数
  • NumPy中numpy.argmin函数
  • NumPy中numpy.argmax函数

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] 

你可能感兴趣的:(Opencv学习,计算机视觉)