Python numpy广播3维(多重加权和)

Python numpy广播3维(多重加权和),python,arrays,numpy,Python,Arrays,Numpy,我已经习惯了用二维阵列进行广播,但我无法理解我想做的三维事情 我有两个二维数组: >>> a = np.array([[0.01,.2,.3,.4],[.2,.03,.4,.5],[.9,.8,.7,.06]]) >>> b= np.array([[1,2,3],[3.,4,5]]) >>> a array([[ 0.01, 0.2 , 0.3 , 0.4 ], [ 0.2 , 0.03, 0.4 , 0.5 ],

我已经习惯了用二维阵列进行广播,但我无法理解我想做的三维事情

我有两个二维数组:

>>> a = np.array([[0.01,.2,.3,.4],[.2,.03,.4,.5],[.9,.8,.7,.06]])
>>> b= np.array([[1,2,3],[3.,4,5]])
>>> a
array([[ 0.01,  0.2 ,  0.3 ,  0.4 ],
       [ 0.2 ,  0.03,  0.4 ,  0.5 ],
       [ 0.9 ,  0.8 ,  0.7 ,  0.06]])
>>> b
array([[ 1.,  2.,  3.],
       [ 3.,  4.,  5.]])
现在,我想要的是a中所有行的总和,其中每行由b中的列值加权。 所以,我想要
1.*a[0,:]+2.*a[1,:]+3.*a[2,:]
和b的第二行相同

因此,我知道如何一步一步地做到这一点:

>>> (np.array([b[0]]).T * a).sum(0)
array([ 3.11,  2.66,  3.2 ,  1.58])

>>> (np.array([b[1]]).T * a).sum(0)
array([ 5.33,  4.72,  6.  ,  3.5 ]) 
但我有一种感觉,如果我知道如何将这两个数组正确地作为三维数组进行广播,我可以一次性得到我想要的结果。 结果是:

array([[ 3.11,  2.66,  3.2 ,  1.58],
       [ 5.33,  4.72,  6.  ,  3.5 ]]) 

我想这应该不会太难吧

要执行矩阵乘法:

>>> b.dot(a)
array([[ 3.11,  2.66,  3.2 ,  1.58],
       [ 5.33,  4.72,  6.  ,  3.5 ]])

啊,就是这么简单…;-)这样,正确的广播将在后台自动进行。。。我的想法太复杂了。谢谢