如何使用较低的dim数组作为遮罩来创建numpy遮罩的数组?

时间:2020-04-26 18:44:20

标签: python numpy masked-array

假设

a = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9],
    ]

mask = [1, 0, 1]

我想要

a[mask] == [
           [1, 2, 3],
           [False, False, False],
           [7, 8, 9],
           ]

或等价物。

意思是,我想使用a访问mask,其中mask的尺寸较小,并且具有自动广播功能。 我想在np.ma.array参数的mask=的构造函数中使用它。

1 个答案:

答案 0 :(得分:2)

这应该有效。请注意,您的遮罩的含义与np.ma.masked_array相反,其中1表示已移除,因此我将您的遮罩反转了:

>>> a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> mask = ~np.array([1, 0, 1], dtype=np.bool)  # Note - inverted mask.
>>> masked_a = np.ma.masked_array(
...     a,
...     np.repeat(mask, a.shape[1]).reshape(a.shape)
... )
>>> masked_a
masked_array(
  data=[[1, 2, 3],
        [--, --, --],
        [7, 8, 9]],
  mask=[[False, False, False],
        [ True,  True,  True],
        [False, False, False]],
  fill_value=999999)