Sou*_*ler 5 numpy python-2.x scipy euclidean-distance
好的,我最近发现该scipy.spatial.distance.cdist命令可以非常快速地解决源和目标的两个向量数组之间的完整距离矩阵。请参阅:如何使用 numpy 计算欧氏距离?
我想在解决两个相同大小的数组之间的距离时尝试复制这些性能提升。两个 SINGLE 向量之间的距离计算起来相当直接,如上一个链接所示。我们可以采用向量:
import numpy as np
A=np.random.normal(size=(3))
B=np.random.normal(size=(3))
Run Code Online (Sandbox Code Playgroud)
然后使用“numpy.linalg.norm”,其中
np.linalg.norm(A-B)
Run Code Online (Sandbox Code Playgroud)
相当于
temp = A-B
np.sqrt(temp[0]**2+temp[1]**2+temp[2]**2)
Run Code Online (Sandbox Code Playgroud)
但是,当我想知道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)
Run Code Online (Sandbox Code Playgroud)
给了我一组 42 个距离的ith 元素A到ith 元素之间的距离B。而该norm函数正确计算整个矩阵的范数,给我一个不是我正在寻找的值。具有 42 个距离的行为是我想要保持的,希望以几乎与我cdist解决完整矩阵所获得的速度一样快。所以问题是使用 python 和 numpy/scipy 计算i具有 shape 的数据之间的距离的最有效方法是什么(n,i)?
谢谢,斯隆
我想你自己已经破获了大部分案子。然而,我会使用以下内容,而不是你的最后一行:
np.sqrt(np.sum(temp**2,0))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4658 次 |
| 最近记录: |