向量化 numpy 数组乘法

问题描述 投票:0回答:1
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)
。如何在不使用循环的情况下向量化这里的乘法?

python numpy vectorization multiplication
1个回答
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]])
© www.soinside.com 2019 - 2024. All rights reserved.