Numpy / Tensorflow:将3D张量的每个深度矢量乘以2D矩阵

时间:2017-12-20 02:35:09

标签: python numpy tensorflow matrix-multiplication

我有一个 4x4x256 张量和一个 128x256 矩阵。我需要将矩阵的每个 256-d 深度方向向量乘以矩阵,这样我得到 4x4x128 张量。

在Numpy工作,我不清楚如何做到这一点。在它们当前的形状中,它看起来不像np.dot的任何变体。操纵形状以利用广播规则似乎没有提供任何帮助。 np.tensordotnp.einsum可能很有用,但查看文档正好在我的脑海中。

有一种有效的方法吗?

1 个答案:

答案 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的其余部分保持不变。