好的,我最近发现scipy.spatial.distance.cdist
命令在解决源数组和目标数组之间的完整距离矩阵时非常快速。请参考:如何使用numpy计算欧几里德距离?
当解决两个大小相等的数组之间的距离时,我想尝试复制这些性能提升。如前面的链接所示,两个单一向量之间的距离计算相对简单。我们可以采取向量:
import numpy as np
A=np.random.normal(size=(3))
B=np.random.normal(size=(3))
然后使用´numpy.linalg.norm´,其中
np.linalg.norm(A-B)
相当于
temp = A-B
np.sqrt(temp[0]**2+temp[1]**2+temp[2]**2)
第一种方法在大多数情况下都很好用,但是当我想知道两组向量之间的距离时,my_distance = distance_between( A[i], B[i] ) for all i
第二种解决方案非常完美。如预期的那样:
A=np.random.normal(size=(3,42))
B=np.random.normal(size=(3,42))
temp = A-B
np.sqrt(temp[0]**2+temp[1]**2+temp[2]**2)
给我一组42个距离,它们描述了A数组的第i个元素到B数组的第i个元素之间的距离。而norm函数正确计算整个矩阵的范数,给出一个不是我想要的单一值。我希望保持这42个距离的行为方式,希望可以像使用cdist解决完整矩阵时一样快速。因此问题是,使用Python和NumPy/SciPy计算形状为(n, i)数据之间的i个距离的最有效方法是什么?谢谢,Sloan。
np.sqrt(temp[0]**2+temp[1]**2+temp[2]**2)
实际上比其他方法快3倍。 - SoulNibbler