Python 如何将张量乘以矩阵

Python 如何将张量乘以矩阵,python,numpy,tensorflow,Python,Numpy,Tensorflow,所以我有一个数组A和一个数组B和一个数组A和一个数组[32,60]。第一个维度是批量大小,因此第一个维度是独立的。我想做的是一个简单的向量乘矩阵。因此,对于A中的每个样本,我想将shape[60,60]的矩阵与shape[60]的向量相乘。在批A*B上相乘应该会得到一个形状数组[32,60] 这应该很简单,但我做错了: >>> v = np.matmul(A,B) ValueError: shapes (32,60,60) and (32,60) not aligned: 60

所以我有一个数组
A
和一个数组
B
和一个数组
A
和一个数组
[32,60]
。第一个维度是批量大小,因此第一个维度是独立的。我想做的是一个简单的向量乘矩阵。因此,对于
A
中的每个样本,我想将shape
[60,60]
的矩阵与shape
[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)

这是针对tensorflow的,但如果我能转换符号,一个简单的答案可能就足够了。

似乎您正试图用
矩阵乘法
对两个输入数组中的最后一个轴进行求和减少。因此,使用
np.einsum
,它将是-

np.einsum('ijk,ik->ij',A,B)
np.matmul(A,B[...,None])[...,0]
对于
tensorflow
,我们可以使用


使用,我们需要通过在最后一个轴上引入新的轴,将
B
扩展到
3D
。因此,使用
np.matmul
将得到
B的第二个轴
扩展版本
sum减少
,而不是
A的第三个轴
。结果将是
3D
。因此,通过切片或
np.squence
获得最后一个单粒子轴。因此,实施将是必要的-

np.einsum('ijk,ik->ij',A,B)
np.matmul(A,B[...,None])[...,0]

我们已经在那里有了一个现有的功能。

tf.einsum就像一个符咒。我不知道艾因森。谢谢