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

时间:2014-08-20 08:08:48

标签: 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 ],
       [ 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 ]]) 

我想这不应该太难......?!?

1 个答案:

答案 0 :(得分:3)

你想做矩阵乘法:

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