#numpy #scipy #scipy.ndimage
Вопрос:
У меня есть матрица с разными метками. Как мне найти все прямоугольники с одинаковыми значениями?
Я пытался:
import numpy as np
import scipy.ndimage as nd
a= np.zeros((120, 120), dtype=np.uint16)
a[:100, :100] = 5
a[10:100, 10:100] = 6
a[12:100, 12:100] = 7
for v in np.unique(a):
if v:
l=nd.label((a==v).astype(int))
f = nd.find_objects(l[0])
print(v, f)
Это сообщает
5 [(slice(0, 100, None), slice(0, 100, None))]
6 [(slice(10, 100, None), slice(10, 100, None))]
7 [(slice(12, 100, None), slice(12, 100, None))]
Но a[50, 50] = 7, так что явно нет прямоугольника [0:100, 0:100] со значением 5
Комментарии:
1. из документации
find_objects
: «Срезы соответствуют минимальному параллелепипеду, содержащему объект «., поэтому все правильно.2. Я не говорил, что find_objects делает это неправильно. Это просто (не совсем) то, что мне нужно.