2017-09-30 67 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)

相關問題