Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何对关系中的矩阵进行分组_Python_Numpy - Fatal编程技术网

Python 如何对关系中的矩阵进行分组

Python 如何对关系中的矩阵进行分组,python,numpy,Python,Numpy,我喜欢有几个矩阵。我首先检查他们是否处于转换关系中。如果是,我想将它们分组。如果不是,我喜欢把它们分开。例如,d)和g)是a)的移位产物;e) 和h)是b)的移动产品;f) 是c)的移位积。然后我喜欢分组(a,d,g);(b、e、h);(c,f) 编辑: 我已更正最后2D矩阵中的数字,以匹配OP原始图形中矩阵h中两点的位置 我简化了for循环 我增强了结果组的打印输出(如OP所述,这些组是a、d、h、b、e、g和c、f) 面对问题的模糊描述,一个可能的解决方案是在字典中对矩阵进行分组,该字典

我喜欢有几个矩阵。我首先检查他们是否处于转换关系中。如果是,我想将它们分组。如果不是,我喜欢把它们分开。例如,d)和g)是a)的移位产物;e) 和h)是b)的移动产品;f) 是c)的移位积。然后我喜欢分组(a,d,g);(b、e、h);(c,f)

编辑:

  • 我已更正最后2D矩阵中的数字,以匹配OP原始图形中矩阵
    h
    中两点的位置
  • 我简化了
    for
    循环
  • 我增强了结果组的打印输出(如OP所述,这些组是
    a、d、h
    b、e、g
    c、f

  • 面对问题的模糊描述,一个可能的解决方案是在字典中对矩阵进行分组,该字典根据矩阵中两点之间的坐标增量编制索引


    什么是起始索引?(0,0)或(1,1)它们是矩阵图中的指数和点如何关联@平天
    (1,1)、(2,1)
    可以切换到
    (2,3)、(3,3)
    ,目前为止还不错,但是。。。
    (3,3)、(2,3)
    也是
    (1,1)、(2,1)
    的移位吗?是@gboffi,通过向量(1,2)。很抱歉,我的问题不清楚。这里的变化可以理解如下。向量(0,1)移动坐标(1,1)和(2,1)分别为(1,2)和(2,2)的两个点的集合(a)->集合(d)。类似地,通过向量(1,2),两点(1,1)和(2,1)的集合(a)成为(2,3)和(3,3)的集合(g)。类似地,通过向量(1,1),两点(1,2)和(2,2)的集合(d)变换为两点(2,3)和(3,3)的集合(g)。这就是为什么集合(a)、(d)和(g)是相同的。这不是因为每个集合中两个点之间的距离。啊,如果你将相同的向量添加到两个点上① 点之间的2D距离保持不变(这是我的
    dx,dy
    计算),并且② 点的顺序很重要。请不要仅仅从一个原始的公式来思考,如果你从不同的角度来看问题,有时问题会变得更容易。我恐怕不是这样。如果每场比赛都有3分或3分以上,那怎么办?请帮助我考虑编辑问题中的一个例子。
    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)]
        ])
    
    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]: