У меня есть многополосный растровый, имеющий 23 полосы, например. Я читаю растровое изображение с помощью GDAL и преобразовываю его в массив numpy. В numpy, когда я проверяю форму массива, он отображается как 23,4,5 i.e. 23 = bands, 4 = row and 5 = col
. Я хочу пропустить каждый пиксель таким образом, чтобы я мог получить вектор/массив из всех 23 значений, связанных с одним пикселем.Петля через каждый пиксель в многодиапазонном растере в Python
Я объясняю его дальше подробно на примере ...
Band 1
[[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20]]
Band 2
[[21, 22, 23, 24, 25],
[26, 27, 28, 29, 30],
[31, 32, 33, 34, 35],
[36, 37, 38, 39, 40]]
Band 3
[[31, 32, 33, 34, 35],
[36, 37, 38, 39, 40],
[41, 42, 43, 44, 45],
[46, 47, 48, 49, 50]]
Band 4
[[41, 42, 43, 44, 45],
[46, 47, 48, 49, 50],
[51, 52, 53, 54, 55],
[56, 57, 58, 59, 60]]
Теперь я хочу, чтобы перебрать все полосы таким образом, что я должен получить массив значений [1,21,31,41] in first iteration and [2,22,32,42] in second iteration
и так далее. Я могу сделать это в R, используя функцию указателя math и извлечения, но в python я не могу этого сделать, потому что у меня очень мало опыта с циклизацией и индексированием массива в python.
Я попробовал некоторые коды, приведенные на StackOverflow
for cell in arr:
print cell
for cell in arr.flat:
print cell
for row in arr:
for cell in row:
print cell
for (i,row) in enumerate(arr):
for (j,value) in enumerate(row):
print value
Выход я получаю не по мере необходимости.
Что бы вы ни пытались сделать, есть более эффективный способ. Посмотрите на индексы индексирования numpy, numpy.reshape и т. Д. Обычно вы должны иметь возможность векторизовать вычисления и избегать большинства циклов. Если вы дадите нам более подробную информацию о том, что происходит в цикле, мы можем указать вам в правильном направлении. – Benjamin