如何将张量乘以矩阵

时间:2017-09-14 18:28:59

标签: python numpy tensorflow

所以我的数组A的形状为[32,60,60],数组B的形状为[32,60]。第一个维度是批量大小,因此第一个维度是独立的。我想要做的是通过向量乘法的简单矩阵。因此,对于A中的每个样本,我想将形状矩阵[60,60]与形状[60]的向量相乘。在批处理A * B中进行乘法,应该为我提供一个形状[32,60]的数组。

这应该很简单,但我做错了:

>>> v = np.matmul(A,B)
ValueError: shapes (32,60,60) and (32,60) not aligned: 60 (dim 2) != 32 (dim 0)

这是针对张量流的,但如果我可以转换符号,那么一个笨拙的答案就足够了。

1 个答案:

答案 0 :(得分:2)

您似乎正在尝试sum-reduce来自两个输入数组的最后一个轴matrix-multiplication。因此,使用np.einsum,它将是 -

np.einsum('ijk,ik->ij',A,B)

对于tensorflow,我们可以使用tf.einsum

使用np.matmul,我们需要通过在最后一个轴上引入新轴将B扩展到3D。因此,使用np.matmul将获得B's扩展版本sum-reduced的第二轴与A的第三个轴。结果将是3D。因此,使用切片或np.squeeze将最后一个单例轴挤出。因此,实施将是 -

np.matmul(A,B[...,None])[...,0]

我们已经有了tf.matmul函数。