假设我有两个数组VQ,其中V(i, j, j)Q(j, j)。现在,我希望计算Q与每个“ cc”“行”的点积,并将结果保存为V大小的矩阵。只需在(i, j, j)上进行迭代,即可使用for循环轻松完成此操作

import numpy as np

v = np.random.normal(size=(100, 5, 5))
q = np.random.normal(size=(5, 5))
output = np.zeros_like(v)

for i in range(v.shape[0]):
    output[i] = q.dot(v[i])


但是,这对于我的需求来说太慢了,我猜想有一种方法可以使用ieinsum来矢量化此操作,但是我还没有弄清楚。有人能指出我正确的方向吗?谢谢

最佳答案

您当然可以使用np.tensordot,但之后需要交换轴,如下所示-

out = np.tensordot(v,q,axes=(1,1)).swapaxes(1,2)


使用np.einsum,它会更简单一些,就像这样-

out = np.einsum('ijk,lj->ilk',v,q)

07-24 09:52
查看更多