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就像一个符咒。我不知道艾因森。谢谢