[[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)
поможет мне идентифицировать уникальные значения меток.
Вам нужно использовать 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]}