Как выполнить итерацию по каждому элементу в 2D-массиве в python?

#python #arrays #loops #for-loop

#python #массивы #циклы #for-цикл

Вопрос:

У меня есть 2d массив numpy размером 768 x 1024, который содержит все значения класса сегментированного изображения. Я обнаружил пешеходов / транспортные средства в этом массиве и получил верхнюю левую и нижнюю правую координаты ограничивающей рамки, скажем (381,254) и (387,257).

(381,254) (381,255) …………… (381,257)

(382,254)

.

.

.

(387,254) ……………………………(387,257)

Каждая ячейка под этими координатами имеет определенное значение класса (числа от 1 до 22). Меня интересуют ‘4’ и ’10’, которые указывают, что ограничивающая рамка содержит пешехода или транспортное средство соответственно.

Как мне выполнить итерацию по каждому элементу в отдельности (все элементы в строке 381 из столбца 254 в 257, затем в следующую строку и так далее до нижней правой координаты (387,257)) и проверить, содержит ли эта конкретная ячейка число 4 или 10?

Я пытался использовать вложенный цикл for, но я не могу понять логику.

 x_1 = 381
x_2 = 387
y_1 = 254
y_2 = 257
ROW = []
COL = []
four = 0
ten = 0
other = 0
for rows in range(x_1, x_2):
   ROW.append(rows)
   for cols in range(y_1, y_2):
     COL.append(cols)
     if array[rows][cols] == 4:
        four  = 1
     elif array[rows][cols] == 10:
        ten  = 1
     else:
        print('random number')
        other  = 1
 

Любая помощь будет оценена! Спасибо.

Комментарии:

1. Ограничивающий прямоугольник? 2D-массив Python? Я думаю, тебе следует начать дружить с numpy . Вы можете сделать это на базовом Python (на самом деле, хорошо, что это было сделано один раз), но эти задачи будут намного проще в numpy / pandas.

Ответ №1:

Попробуйте использовать это вместо:

 x_1 = 381
x_2 = 387
y_1 = 254
y_2 = 257
ROW = []
COL = []
four = 0
ten = 0
other = 0
for rows in range(x_1, x_2):
   ROW.append(rows)
   for cols in range(y_1, y_2):
     COL.append(cols)
     if 4 in (x_2, y_2):
        four  = 1
     elif 10 in (x_2, y_2):
        ten  = 1
     else:
        print('random number')
        other  = 1
 

Он проверит array[x][y] , содержит ли номер 4 или 10. Например, если array[x][y] == (12, 4) тогда four = 1 .