我有一个4x4x256张量和一个128x256矩阵。我需要将矩阵的每个256-d深度向量乘以矩阵,这样我得到一个4x4x128张量。
在Numpy工作,我不清楚如何做到这一点。在他们目前的形状中,它看起来不像np.dot
的任何变体存在。操纵形状以利用广播规则似乎没有提供任何帮助。 np.tensordot
和np.einsum
可能很有用,但看着文档正在我的脑海中。
有没有一种有效的方法来做到这一点?
您可以使用np.einsum
执行此操作。随机值的示例:
a = np.arange(4096.).reshape(4,4,256)
b = np.arange(32768.).reshape(128,256)
c = np.einsum('ijk,lk->ijl',a,b)
print(c.shape)
在这里,subscripts
论证是:ijk,lk->ijl
根据您的要求,i=4, j=4, k=256, l=128
逗号分隔两个操作数的下标,下标表示应该在每个张量中的最后一个下标(对于两个张量共有的下标k
)上执行乘法。
->
之后的张量下标表明合成张量应该具有(i,j,l)
的形状。现在,根据您正在执行的操作类型,您可能必须保留此下标或将此下标更改为jil
,但其余的subscripts
保持不变。