基本上我有这个矩阵A
:
[[1, 2, 3],
[2, 4, 6],
[3, 6, 9],
[4, 8, 12]]
我有另一个矩阵B
(其中每列是A
中相应列的总和):
[[10, 20, 30],
[10, 20, 30],
[10, 20, 30],
[10, 20, 30]]
我希望我的结果矩阵C
如下:
[[1/10, 2/20, 3/30],
[2/10, 4/20, 6/30],
[3/10, 6/20, 9/30],
[4/10, 8/20, 12/30]]
有没有办法在numpy中执行此操作,还是必须使用for循环?我真的不想使用for循环b / c它们很慢,所以如果有人对此有答案我真的很感激它!
答案 0 :(得分:2)
如果阵列形状相同,您可以直接进行划分:
import numpy as np
a = np.array([[1, 2, 3],
[2, 4, 6],
[3, 6, 9],
[4, 8, 12]])
b = np.array([[10, 20, 30],
[10, 20, 30],
[10, 20, 30],
[10, 20, 30]])
a / b
在Python 3中给出以下内容(您将在Python 2中获得整数除法,除非您这样做,例如a.astype(float) / b
):
array([[ 0.1, 0.1, 0.1],
[ 0.2, 0.2, 0.2],
[ 0.3, 0.3, 0.3],
[ 0.4, 0.4, 0.4]])
由于b
中存在大量冗余,您甚至可以这样做:
a / [10, 20, 30]
[10, 20, 30]
同样可以来自np.sum(a, axis=0)
。无论哪种方式,NumPy的广播将负责匹配阵列的形状以获得合理的答案。