如何在Python numpy中的2D数组上应用1D掩码?

时间:2013-04-26 04:50:28

标签: python numpy mask

有一维值数组:

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

还有另一个形状为(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))的形状的面具来创建它。

1 个答案:

答案 0 :(得分:1)

如果您执行以下操作,您的掩码可以由bool数组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定义需要一组额外的括号。)