如何使用较低的暗淡数组作为掩码创建一个 numpy 掩码数组?

How to create a numpy masked array using lower dim array as a mask?

假设

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

或同等学历。

意思是,我想用mask访问a,其中mask是低维的,并且有自动广播。 我想在 mask= 参数的 np.ma.array 的构造函数中使用它。

这应该有效。注意你的mask和np.ma.masked_array意思相反,1是removed的意思,所以我把你的mask倒过来了:

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