gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:37:30 26 4
gpt4 key购买 nike

我正在尝试计算每个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com