Python 使用一个数组过滤掉另一个数组

Python 使用一个数组过滤掉另一个数组,python,arrays,numpy,Python,Arrays,Numpy,如何使用一个数组过滤掉另一个非零值数组 from numpy import array a = array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19], [20, 21, 22, 23, 24]]) b = array([[0, 0, 1, 0, 0],

如何使用一个数组过滤掉另一个非零值数组

from numpy import array

a = array([[ 0,  1,  2,  3,  4],
           [ 5,  6,  7,  8,  9],
           [10, 11, 12, 13, 14],
           [15, 16, 17, 18, 19],
           [20, 21, 22, 23, 24]])

b = array([[0, 0, 1, 0, 0],
           [0, 0, 2, 0, 0],
           [0, 0, 3, 0, 0],
           [0, 0, 4, 0, 0],
           [0, 0, 5, 0, 0]])
预期结果:

array([[ 0, 0, 2,  0, 0],
       [ 0, 0, 7,  0, 0],
       [ 0, 0, 12, 0, 0],
       [ 0, 0, 17, 0, 0],
       [ 0, 0, 22, 0, 0]])
谢谢您

单线解决方案:


a*(b!=0)

如果需要新数组,最简单的方法是
np。其中
有3个参数:

>>> import numpy as np
>>> np.where(b, a, 0)
array([[ 0,  0,  2,  0,  0],
       [ 0,  0,  7,  0,  0],
       [ 0,  0, 12,  0,  0],
       [ 0,  0, 17,  0,  0],
       [ 0,  0, 22,  0,  0]])
如果您想就地更改
a
,可以使用基于
b
的布尔索引:

>>> a[b == 0] = 0
>>> a
array([[ 0,  0,  2,  0,  0],
       [ 0,  0,  7,  0,  0],
       [ 0,  0, 12,  0,  0],
       [ 0,  0, 17,  0,  0],
       [ 0,  0, 22,  0,  0]])