Как создать массив с маской numpy, используя меньший дим-массив в качестве маски? - PullRequest
0 голосов
/ 26 апреля 2020

Предположим,

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 Ответ

2 голосов
/ 26 апреля 2020

Это должно работать. Обратите внимание, что ваша маска имеет противоположное значение 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)
...