Как сгруппировать матрицы, находящиеся в отношениях - PullRequest
0 голосов
/ 23 декабря 2019

Мне нравится иметь несколько матриц. Сначала я проверяю, находятся ли они в переменчивых отношениях. Если да, я хочу сгруппировать их. если нет, то мне нравится их разделять. Например, г) и г) являются сдвигающими произведениями а);д) и з) смещают произведения б);е) смещается произведение с). Тогда я люблю группировать (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)]
    ])

enter image description here

enter image description here

1 Ответ

1 голос
/ 23 декабря 2019

Редактировать:

  1. Я исправил числа в последней 2D матрице , чтобы они соответствовали положению двух точек в матрице hна исходном рисунке ОП.
  2. Я упростил цикл for
  3. Я улучшил распечатку результирующих групп (которые a, d, h, b, e, g и c, f какопределено ОП).

Возможное решение, несмотря на неоднозначное описание проблемы, состоит в том, чтобы сгруппировать ваши матрицы в словарь, индексированный по приращениямв координатах между двумя точками в матрице .

In [20]: from numpy import array 
    ...:  
    ...: matrices = array([ 
    ...:     [(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, 1)] 
    ...: ]) 
    ...: 
    ...: shifted_groups = {} 
    ...:  
    ...: for m in matrices:
    ...:     dx, dy = m[1]-m[0] 
    ...:     shifted_groups.setdefault((dx, dy), []).append(m) 
    ...:  
    ...: for k, v in shifted_groups.items(): 
    ...:     print("%10r: "%(k,), ''.join("%r"%[list(list(r) for r in m) for m in v]))    
    (1, 0):  [[[1, 1], [2, 1]], [[1, 2], [2, 2]], [[2, 3], [3, 3]]]
   (1, -1):  [[[1, 2], [2, 1]], [[1, 3], [2, 2]], [[2, 2], [3, 1]]]
   (1, -2):  [[[1, 3], [2, 1]], [[2, 3], [3, 1]]]


In [21]:                                                                                  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...