所有行上的快点产品

Abh*_*kur 3 python arrays numpy

我有一个2d 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])
Run Code Online (Sandbox Code Playgroud)

如果阵列X很小但是需要花费大量时间才能很好地工作X.有没有什么方法可以让它更快或更蟒蛇化,以便快速?

eic*_*erg 6

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

当数组变大时,它可以是块,但是根据你的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)
Run Code Online (Sandbox Code Playgroud)

我不认为这对相对较小的数组有用.并且线程有时也可以更好地处理这个问题.