python - 获得矩阵乘法的更快方法

标签 python distance

我正在尝试计算每个 vec 的所有成对距离的 sinc(vec*dist),其中 vec 是一维数组dist 是矩阵 coord 中行向量的成对距离。我正在使用:

dist = scipy.spatial.distance.pdist(coord)

for i in range(len(vec)):
    I_avr[i] = numpy.sum(numpy.sinc(vec[i]*dist))
    print vec[i], I_avr[i]

通常 coord 有 10^5 到 10^6 个向量,vec 的长度是 10^3 到 10^4。谁能推荐改进或更改以使其更快?

最佳答案

理论上,您可以将距离矩阵分成多个 block ,逐 block 进行,然后聚合,但我认为这通常不可行,因为 sum(sinc(...)) 花费太多时间。让我们用一个大小为 10,000 的 block 来尝试:

>>> from scipy.spatial import distance
>>> import numpy as np
>>> np.random.seed(0)
>>> coord = np.random.random((10000, 3))
>>> dist = distance.pdist(coord)
>>> %timeit np.sum(np.sinc(dist))
1 loop, best of 3: 1.82 s per loop

这只是一个元素,没有乘法。如果 vec 的大小为 10^310^4,则一个 10k x 10k block 的时间将从 30 分钟到 5.5 小时不等。

现在,如果我们将 coord 的大小增加到从 10^510^6 的值,则总耗用时间将预计在 55 小时到 6.3 年之间,具体取决于输入的确切值。

关于python - 获得矩阵乘法的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36752670/

相关文章:

python - 如何在 Tensorflow 上使用线性回归模型和我自己的数据

python - tqdm的total参数有什么作用?

python - 在原子中如何自动完成函数参数?

python - Scrapy 结合文本和粗体

python - 如何使用距离矩阵和 kmedoids 将新观测值分配给聚类?

javascript - 如何在谷歌浏览器中从 HTML 运行 python 脚本?

r - 如何从向量的均值中选择最远的值

distance - Kademlia XOR度量标准属性用途

sparql - geoSPARQL 距离产生空结果

java - 快速比较地理点之间的距离