Pythonic способ индексации 2d массива со списком координат - PullRequest
3 голосов
/ 23 апреля 2019

У меня есть координаты класса numpy.ndarray и размеров (200,2).В основном вывод из regionprops .

Я хочу проиндексировать матрицу изображения (также ndarray) dim img.shape = (1000,1000).Я хочу иметь возможность сделать что-то вроде

for prop in region:
    img[prop.coords] = 0

Однако, что происходит, он не видит координаты в виде пары строк и столбцов.Но, скорее, каждое число является номером строки и устанавливает всю эту строку равной 0.

Как я могу это исправить?

Я попытался изменить форму массива, но, похоже, это тоже не сработало.Единственное, о чем я могу подумать, - это преобразовать эти индексы в матрицу, в которой размер матрицы равен размеру изображения, а эти координаты равны 1, а все остальные значения координат равны 0. Затем выполните индексирование с использованием этой матрицы.Однако это не кажется более эффективным, чем просто грубое форсирование с помощью цикла for.

Ответы [ 2 ]

2 голосов
/ 23 апреля 2019

Вы должны указать координаты в виде кортежа, чтобы вызвать базовую индексацию:

for prop in region:
    img[tuple(prop.coords.T)] = 0
1 голос
/ 23 апреля 2019
for prop in region:
    (min_row, min_col, max_row, max_col) = prop['bboxtuple']
    img[min_row:max_row, min_col:max_col] = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...