【发布时间】:2012-12-10 17:28:24
【问题描述】:
好的,我最近发现scipy.spatial.distance.cdist 命令可以非常快速地求解源和目标的两个向量数组之间的完整距离矩阵。
见:How can the euclidean distance be calculated with 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)
在A 的ith 元素与B 的ith 元素之间给出一组42 个距离。而norm 函数正确计算了整个矩阵的范数,给了我一个不是我想要的值。
42 距离的行为是我想要保持的,希望它的速度几乎与我从 cdist 获得的求解完整矩阵的速度一样快。所以问题是使用python和numpy/scipy计算i形状(n,i)的数据之间的距离最有效的方法是什么?
谢谢, 斯隆
【问题讨论】:
标签: numpy scipy python-2.x euclidean-distance