Python numpy数组上的多维矩阵乘法

Python numpy数组上的多维矩阵乘法,python,numpy,matrix,machine-learning,neural-network,Python,Numpy,Matrix,Machine Learning,Neural Network,我正在用python实现一个神经网络,作为反向传播的一部分,我需要将一个3D矩阵乘以一个2D矩阵,称之为W,维100,200,结果应该是维200,200,1 A是误差向量,W是权重矩阵,乘积用于计算前一层的更新 我试着用numpy.core.umath_测试中的matrix_乘法来求解它,我试着将W整形为100200,1,然后再乘法,但结果是 ValueError:矩阵_乘法:输入操作数1的核心维度0不匹配,gufunc签名m,n,n,p->m,p大小100与1不同 我如何解决这个问题?您可以使

我正在用python实现一个神经网络,作为反向传播的一部分,我需要将一个3D矩阵乘以一个2D矩阵,称之为W,维100,200,结果应该是维200,200,1

A是误差向量,W是权重矩阵,乘积用于计算前一层的更新

我试着用numpy.core.umath_测试中的matrix_乘法来求解它,我试着将W整形为100200,1,然后再乘法,但结果是

ValueError:矩阵_乘法:输入操作数1的核心维度0不匹配,gufunc签名m,n,n,p->m,p大小100与1不同

我如何解决这个问题?

您可以使用交换键排列轴,或者简单地重塑轴-

或者,我们可以使用沿A的最后一个轴的唯一切片,然后在矩阵乘法后扩展到3D-

或者我们可以使用-


你是否有一个令人信服的理由来保持一个200, 100, 1的形状,而不是放弃琐碎的尺寸,使它的形状200, 100?“WarrenWeckesser,我没有考虑这个选项。谢谢你的建议,我会研究的。
np.tensordot(A,W,axes=((1),(0))).swapaxes(1,2)
np.tensordot(A,W,axes=((1),(0))).reshape(A.shape[0],W.shape[1],1)
A[:,:,0].dot(W)[...,None]
np.einsum('ijk,jl->ilk',A,W)