我已经研究了几个星期的代码,并试图通过使用 cdist 而不是多级 for 循环来计算矩阵中每个点之间的距离来加速它。
我想要的是:
from scipy.spatial.distance import cdist
import numpy as np
a=np.array([[1],[2],[3]])
cdist(a,a, lambda u,v: u-v)
[[ 0. -1. -2.]
[ 1. 0. -1.]
[ 2. 1. 0.]]
但是,我的问题是,在我的研究背景下,a 非常大,并且在 cdist 中使用自定义 lambda 函数比 cdist(a,a) 慢得多(~2 个数量级)——但这只会给出正值。即实际上,我必须计算这 15,000 次,其中 a 有 1,000 个元素,所以那些 2oom 很重要。
注意 cdist(a,a) 没有给出所需的输出,因为它都是正值。
[[0. 1. 2.]
[1. 0. 1.]
[2. 1. 0.]]
我希望你们可以对我如何做一些事情来从 cdist 创建所需的签名输出提出建议,但比使用 lambda 函数更快。
谢谢!