Как быстро замаскировать разные кусочки в моем массиве? - PullRequest
3 голосов
/ 21 марта 2019

У меня есть 3d-массив, где все длины осей одинаковы (например (5,5,5)). Мне нужно замаскировать весь массив и сохранить некоторые фрагменты в массиве без маски в соответствии с кодом ниже. Мне удалось сделать это с помощью цикла for, но я подумал, есть ли более быстрое решение там.

array = np.reshape(np.array(np.random.rand(125)), (5,5,5))
array = ma.array(array, mask=True)
for i in range(array.shape[0]):
    for j in range(array.shape[1]):
        array[i, j, :].mask[i:j] = False

Это позволяет мне суммировать этот массив с другим массивом того же размера, игнорируя маскированные значения.

1 Ответ

4 голосов
/ 21 марта 2019

Вы можете создать всю маску за один шаг, используя трансляцию:

i, j, k = np.ogrid[:5, :5, :5] 
mask = (i>k) | (k>=j)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...