如何用numpy矩阵中的所有零替换来自另一个矩阵的相应值

时间:2015-12-23 12:51:38

标签: python numpy matrix

例如

a = np.matrix('1 0; 0 4')
b = mp.matrix('13 17;19 23')

通过执行我将获得的操作:

c = [[1 17]
     [19 4]]

2 个答案:

答案 0 :(得分:5)

您可以使用np.where

c = np.where(a==0, b, a)

In [15]: c
Out[15]: 
array([[ 1, 17],
       [19,  4]])

答案 1 :(得分:3)

使用逻辑索引:

d = (a==0)
a[d] = b[d]

d是一个与ab大小相同的真值数组,可用作掩码。在赋值操作中仅考虑True中标记为d的元素。如果您需要一个包含结果的单独数组,

d = (a==0)
c = a.copy()
c[d] = b[d]

正如Anton所指出的那样,一个好方法是使用numpy.where()

c = numpy.where(a == 0, b, a)

请注意,这几乎等同于上面的三行版本,因为表达式a == 0实际上创建了一个类似d的掩码数组,然后将其传递给where

这两种方法都有优点和缺点。如果你在原地进行转换(例如在矩阵中固定零),第一个选项是最好的。如果你只进行一次计算,Anton的方法是最好的。如果要多次使用相同的掩码,最好将掩码计算与where的应用程序分开:

d = (a == 0)
c = numpy.where(d, a, b)