numpy - многомерная логическая маска - PullRequest
0 голосов
/ 17 декабря 2018

Я довольно новичок в Python и numpy, и я просто не могу заставить это работать без ручной итерации.

У меня есть n-мерный массив данных со значениями с плавающей запятой и булевой "маской" одинаковой формымассив.Из этого мне нужно получить новый массив в той же форме, что и остальные, со всеми значениями из массива данных, где массив масок в той же позиции равен True.Все остальное должно быть 0.:

# given
data = np.array([[1., 2.], [3., 4.]])
mask = np.array([[True, False], [False, True]])

# target
[[1., 0.], [0., 4.]]

Похоже, что numpy.where() может предложить это, но я не могу заставить его работать.

Бонус: не создавайте новый массив, а заменяйтезначения данных на месте, где маска False для предотвращения выделения новой памяти.

Спасибо!

1 Ответ

0 голосов
/ 17 декабря 2018

Это должно работать

data[~mask] = 0

В качестве индекса можно использовать массив логических значений Numpy (https://docs.scipy.org/doc/numpy-1.15.0/user/basics.indexing.html#boolean-or-mask-index-arrays).. Операция будет применяться только к пикселям со значением «True». Здесь сначала необходимоинвертируйте свою маску, чтобы значение False стало True. Вам нужно инвертировать, потому что вы хотите работать с пикселями со значением False.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...