#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
.