Как я могу найти координаты различных значений?

1
[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 1 1 1 0 0 0 0 0 1 1 0 0 3 3 0 0 0 4 4 0 0 0 5 5 5 5 0 0 2 2 2 2 2 0 2 2 2 2 2 0 0 0 6 6 6 6 6 6 0 6 6 6 6]
 [0 1 1 0 0 0 0 0 0 0 0 0 0 3 3 0 0 0 4 4 0 0 5 5 5 5 5 5 0 2 2 2 2 2 2 2 2 2 2 2 2 0 0 6 6 6 6 6 6 6 6 6 6 6]
 [1 1 1 0 0 0 0 0 0 0 0 0 0 3 3 0 0 0 4 4 0 5 5 5 0 0 5 5 5 0 2 2 0 0 2 2 0 0 0 2 2 0 0 6 6 0 0 6 6 6 0 0 6 6]
 [1 1 1 0 0 0 0 0 0 0 0 0 0 3 3 0 0 0 4 4 0 5 5 5 5 0 0 0 0 0 2 2 0 2 2 2 0 0 0 2 2 2 0 6 6 0 0 0 6 6 0 0 6 6]
 [1 1 1 0 0 0 0 0 0 0 0 0 0 3 3 0 0 0 4 4 0 0 5 5 5 5 5 5 0 0 2 2 0 2 2 2 0 0 0 2 2 2 0 6 6 0 0 0 6 6 0 0 6 6]
 [0 1 1 0 0 0 0 0 0 7 0 0 0 3 3 0 0 0 4 4 0 0 0 0 5 5 5 5 5 0 2 2 0 2 2 2 0 0 0 2 2 2 0 6 6 0 0 0 6 6 0 0 6 6]]

Ниже приведен список списков подключенных компонентов (50 x 10), позвольте называть его labels, я хочу создать словарь, в котором номера, кроме 0 являются ключом этого словаря, а значение, соответствующее этому ключу, должно быть координаты, например [xmin,xmax,ymin,ymax],

Возьмем, например, 1:

{'1': [0,10,1,9], '2': [......} 

Будучи новичком в python, мне было сложно писать программу, чтобы сделать это с нуля (не создание и заполнение словаря, а поиск координат). Есть ли способ внутри numpy, который может это сделать, например, np.unique(labels) поможет мне идентифицировать уникальные значения меток.

Теги:
numpy
python-3.x

1 ответ

3
Лучший ответ

Вам нужно использовать np.where. Он возвращает два массива:
- первая содержит рядные индексы y
- второй содержит индексы столбцов x.

import nupmy as np

arr = np.array(labels)

stats = dict()
for i in np.unique(arr):
    if i == 0:
        continue
    else:
        wh = np.where(arr == i)
        stats[i] = [wh[1].min(), wh[1].max(), wh[0].min(), wh[0].max()]

> {1: [0, 10, 1, 9],
   2: [29, 41, 2, 9],
   3: [13, 14, 4, 9],
   4: [18, 19, 4, 9],
   5: [21, 28, 4, 9],
   6: [43, 53, 4, 9],
   7: [9, 9, 9, 9]}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню