好的,我最近发现该scipy.spatial.distance.cdist
命令可以非常快速地解决源和目标的两个向量数组之间的完整距离矩阵。请参阅:如何用 numpy 计算欧几里得距离?
在解决两个相等大小的数组之间的距离时,我想尝试复制这些性能提升。两个 SINGLE 向量之间的距离很容易计算,如上一个链接所示。我们可以取向量:
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 个距离的i
th 元素A
到i
th 元素之间的距离B
。而该norm
函数正确地计算了整个矩阵的范数,给了我一个不是我想要的值。42 距离的行为是我想要保持的,希望它的速度几乎与我cdist
解决完整矩阵的速度一样快。所以问题是使用 python 和 numpy/scipy 计算i
具有 shape 的数据之间的距离的最有效方法是什么(n,i)
?
谢谢,斯隆