Мне нравится иметь несколько матриц. Сначала я проверяю, находятся ли они в переменчивых отношениях. Если да, я хочу сгруппировать их. если нет, то мне нравится их разделять. Например, г) и г) являются сдвигающими произведениями а);д) и з) смещают произведения б);е) смещается произведение с). Тогда я люблю группировать (a, d, g);(б, е, ч);(c, f).
def is_shift(set1, set2):
shift = None # will store a tuple of delta_x, delta_y
for (x1, y1), (x2, y2) in zip(set1, set2):
cur_shift = x1 - x1, y1 - y2
if not shift: # the first pair of points
shift = cur_shift
elif shift != cur_shift: # shifted the same way as the first one?
return False
return True
matrices1 = np.array([
[(1, 1), (2, 1)],
[(1, 2), (2, 1)],
[(1, 3), (2, 1)],
[(1, 2), (2, 2)],
[(1, 3), (2, 2)],
[(2, 3), (3, 1)],
[(2, 3), (3, 3)],
[(2, 2), (3, 2)]
])
matrices2 = array([
[(1, 1), (2, 1), (3, 1)],
[(1, 2), (2, 1), (3, 1)],
[(1, 3), (2, 1), (2, 2)],
[(1, 2), (2, 2), (3, 2)],
[(1, 3), (2, 2), (3, 2)],
[(2, 3), (3, 1), (3, 2)],
[(1, 3), (2, 3), (3, 3)],
[(2, 2), (3, 1), (4, 4)],
[(1, 1), (3, 3), (4, 1)]
])