有没有办法在numpy中将矩阵乘以/除以相应的单元?

时间:2018-02-04 01:58:12

标签: python-3.x numpy matrix

基本上我有这个矩阵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它们很慢,所以如果有人对此有答案我真的很感激它!

1 个答案:

答案 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的广播将负责匹配阵列的形状以获得合理的答案。