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
shape函数返回的是一个元组,表示数组(矩阵)的维度
对于一个二维矩阵a, a.shape返回的元组表示该数组的行数与列数,请看下例:
>>> a=np.array([[1,2],[3,4]])
>>> a
array([[1, 2],
[3, 4]])
>>> a.shape
(2L, 2L)
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]])
如果没有参数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.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.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]