将 3D 矩阵与 2D 矩阵相乘
Multiplying 3D matrix with 2D matrix
我有两个矩阵要相乘。一种是权重矩阵W
,其大小为900x2x2。另一种是输入矩阵I
,其大小为2x2.
我想对 c = WI
进行求和,这将是一个 900x1 矩阵,但是当我执行该操作时,它会将它们相乘并得到 900x2x2 再次矩阵。
问题 #2(相关):所以我将它们都设为二维并相乘 900x4 * 4x1
,但这给了我一个错误提示:
ValueError: operands could not be broadcast together with shapes (900,4) (4,1)
您似乎试图通过该矩阵乘法将第一个数组的最后两个轴与第二个权重数组的仅有两个轴相比较。我们可以将这个想法转化为带有 np.tensordot
的 NumPy 代码,并假设 arr1
和 arr2
分别作为输入数组,就像这样 -
np.tensordot(arr1,arr2,axes=([1,2],[0,1]))
另一种更简单的 NumPy 代码输入方式是 np.einsum
,像这样 -
np.einsum('ijk,jk',arr1,arr2)
我有两个矩阵要相乘。一种是权重矩阵W
,其大小为900x2x2。另一种是输入矩阵I
,其大小为2x2.
我想对 c = WI
进行求和,这将是一个 900x1 矩阵,但是当我执行该操作时,它会将它们相乘并得到 900x2x2 再次矩阵。
问题 #2(相关):所以我将它们都设为二维并相乘 900x4 * 4x1
,但这给了我一个错误提示:
ValueError: operands could not be broadcast together with shapes (900,4) (4,1)
您似乎试图通过该矩阵乘法将第一个数组的最后两个轴与第二个权重数组的仅有两个轴相比较。我们可以将这个想法转化为带有 np.tensordot
的 NumPy 代码,并假设 arr1
和 arr2
分别作为输入数组,就像这样 -
np.tensordot(arr1,arr2,axes=([1,2],[0,1]))
另一种更简单的 NumPy 代码输入方式是 np.einsum
,像这样 -
np.einsum('ijk,jk',arr1,arr2)