我已经习惯了用二维数组进行广播,但我无法理解这个我想做的三维事物。
我有两个二维数组:
>>> 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 ]])
我想这不应该太难......?!?
答案 0 :(得分:3)
你想做矩阵乘法:
>>> b.dot(a)
array([[ 3.11, 2.66, 3.2 , 1.58],
[ 5.33, 4.72, 6. , 3.5 ]])