2017-09-30 66 views
1

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

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]]) 

谢谢

回答

1

最简单的方法,如果你想要一个新的阵列将np.where 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]]) 
1

一号线的解决方案:

a * (b != 0)

相关问题