我有一个 4x4x256 张量和一个 128x256 矩阵。我需要将矩阵的每个 256-d 深度方向向量乘以矩阵,这样我得到 4x4x128 张量。
在Numpy工作,我不清楚如何做到这一点。在它们当前的形状中,它看起来不像np.dot
的任何变体。操纵形状以利用广播规则似乎没有提供任何帮助。 np.tensordot
和np.einsum
可能很有用,但查看文档正好在我的脑海中。
有一种有效的方法吗?
答案 0 :(得分:1)
您可以使用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
的其余部分保持不变。