Я отслеживаю динамически меняющуюся маску, которая катится с использованием некоторого входного смещения. Эта маска хранит значения, которые определяют, где я могу доверять значениям в другом массиве той же формы. Пример изменения маски на каждой итерации приведен ниже. У меня есть большой стек логических проверок, которые определяют, как установить свернутые части маски на ноль, основываясь на том, равны ли значения сдвига x и y 0 или положительны или отрицательны. Здесь я просто запрограммировал все это для ясности.
import numpy as np
mask = np.full((8,8), 10)
#Iteration 1
mask = np.roll(mask, (0, 1), axis = (0,1))
mask[:, :1] = 0
#logical indexing happens here
mask += 1
print (mask)
#Iteration 2
mask = np.roll(mask, (1, 0), axis = (0,1))
mask[:1, :] = 0
#logical indexing happens here
mask +=1
print (mask)
#Iteration 3
mask = np.roll(mask, (2, -1), axis = (0,1))
mask[:, -1:] = 0
mask[:2, :] = 0
#logical indexing happens here
mask +=1
print (mask)
После каждой итерации и до того, как маска увеличивается на единицу, мне нужно индексировать и извлекать значения второго массива, где маска превышает некоторый порог (в данном случае 10). Поскольку я перевожу и устанавливаю значения, я всегда знаю, что часть маски, которая удовлетворяет этому условию, может быть передана в 2d массив. Ниже приведен упрощенный пример того, что я делаю, где arr2 - плоский массив.
import numpy as np
arr1 = np.arange(0, 64, 1).reshape((8,8))
mask = np.full((8,8), 10)
mask[:, 0] = 0
arr2 = arr1[mask >= 10]
Как я могу сохранить arr2 как двумерный массив, где маска выше установленного порога?
Я априори не знаю, какой будет сдвиг, который применяется к маске, поэтому мне приходится полагаться на значения в маске, чтобы определить форму результирующего массива. Мои массивы намного больше, чем в этом примере, и сдвиги находятся в диапазоне от -5 до 5, поэтому я знаю, что не подойду близко к установке всего массива ниже порогового значения. Идея состоит в том, что после ~ 10 итераций некоторые части массива снова становятся заслуживающими доверия и могут быть полезной информацией после логического индекса.