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