2013-04-26 47 views
2

有值的一維數組:如何在Python numpy的二維數組上應用1D蒙版?

arr0 = numpy.array([8,0,9,5]) 

還有另一個2D陣列,其形狀是(len(arr0),3)

arr1 = numpy.array([9,5,6], 
        [2,7,4], 
        [6,7,8], 
        [1,8,3]) 

我想創建的arr1掩蔽陣列,其中arr1[i]是如果arr0[i] == 0掩蔽:

Result arr2 = [[9,5,6], 
       [-,-,-], 
       [6,7,8], 
       [1,8,3]] 

什麼是優雅的方式創建這個新的蒙面陣列

我知道我可以使用形狀(len(arr0),3)的面具來創建它。我希望我可以使用只是(len(arr0))的形狀的面具來創建它。

+0

爲什麼是否有任何問題只是製作一個像'(arr0 * np.ones((arr1.shape [1],1)))。'T' – wim 2013-04-26 05:08:42

+0

@askewchan這與問題不一樣。它沒有一個一維數組,其值用於從二維數組中提取遮罩數組。 – 2013-04-26 05:57:03

回答

1

你的面具可以通過布爾陣列arr0 == 0剛剛成立,如果你做到以下幾點:

In [1]: arr1 = numpy.ma.masked_array(arr1) 
In [2]: arr1[arr0 == 0] = numpy.ma.masked 
In [3]: print arr1 
[[9 5 6] 
[-- -- --] 
[6 7 8] 
[1 8 3]] 

(順便說一句,你需要一個額外的一套在你的ARR1定義括號)