所以我的数组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)
这是针对张量流的,但如果我可以转换符号,那么一个笨拙的答案就足够了。
答案 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
函数。