假设我有两个数组V
和Q
,其中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])
但是,这对于我的需求来说太慢了,我猜想有一种方法可以使用
i
或einsum
来矢量化此操作,但是我还没有弄清楚。有人能指出我正确的方向吗?谢谢 最佳答案
您当然可以使用np.tensordot
,但之后需要交换轴,如下所示-
out = np.tensordot(v,q,axes=(1,1)).swapaxes(1,2)
使用
np.einsum
,它会更简单一些,就像这样-out = np.einsum('ijk,lj->ilk',v,q)