a = np.array([[20, 12, 6],
[12, 24, 18],
[ 0, 14, 30]])
b = np.array([1,0.5])
c = np.array([b ** i for i in range(0, 3)][::-1])
array([[1. , 0.25],
[1. , 0.5 ],
[1. , 1. ]])
使用
c
中的第二列,我想得到
[[20*0.25, 12*0.25, 6*0.25],
[12*0.5, 24*0.5, 18*0.5],
[ 0*1, 14*1, 30*1]
].sum(axis=0)
我想对
c
中的每一列执行此操作。
对于 c
的一维数组,我可以做 (a * c[:,None]).sum(axis=0)
。如何在不使用循环的情况下向量化这里的乘法?
np.eisum
np.einsum('ij,ik', a, c)
array([[32. , 11. ],
[50. , 29. ],
[54. , 40.5]])
请注意,您可以使用广播,尽管效率不如
eisum
:
(a[:,None] * c[:, :,None]).sum(0)
array([[32. , 50. , 54. ],
[11. , 29. , 40.5]])