【发布时间】:2020-03-06 14:54:15
【问题描述】:
我已经研究了几个星期的代码,并试图通过使用 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 函数更快。
谢谢!
【问题讨论】:
-
这解决了我的问题 - 我将其标记为已解决。谢谢!
标签: python numpy scipy scipy-spatial