gpt4 book ai didi

python - 所有行对上的快速点积

转载 作者:太空宇宙 更新时间:2023-11-03 13:43:50 24 4
gpt4 key购买 nike

我有一个二维 numpy 数组 X = (xrows, xcols) 我想在数组的每一行组合上应用点积以获得另一个形状为 P 的数组= (xrow, xrow).

代码如下所示:

P = np.zeros((xrow, xrow))
for i in range(xrow):
for j in range(xrow):
P[i, j] = numpy.dot(X[i], X[j])

如果数组 X 很小,它会工作得很好,但对于很大的 X 会花费很多时间。有什么方法可以让它更快或更像 python 以使其更快吗?

最佳答案

这是通过做 result = X.dot(X.T) 得到的

当数组变大时,可以用 block 来完成,但是根据你的 numpy 后端,这应该已经尽可能多地并行线程化。看来这就是您要找的。

如果出于某种原因你不想依赖它,最终求助于多处理,你可以尝试一些类似的东西

import numpy as np
X = np.random.randn(1000, 100000)
block_size = 10000
from sklearn.externals.joblib import Parallel, delayed
products = Parallel(n_jobs=10)(delayed(np.dot)(X[:, pos:pos + block_size], X.T[pos:pos + block_size]) for pos in range(0, X.shape[1], block_size))
product = np.sum(products, axis=0)

我不认为这对相对较小的数组有用。线程有时也可以更好地解决这个问题。

关于python - 所有行对上的快速点积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24556346/

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