将矩阵分解为较小的子列表

时间:2019-11-12 00:30:23

标签: algorithm

我无法全力以赴地实现这一目标。具体来说,我想破坏下面的矩阵

matrix = [[7, 9, 1, 8, 9, 1],
         [4, 2, 1, 2, 1, 5],
         [3, 2, 3, 1, 2, 3],
         [7, 9, 11, 6, 4, 8],
         [8, 9, 22, 3, 1, 9],
         [1, 1, 1, 1, 1, 1]]

进入:

[[7, 9,
  4, 2],
[1, 8,
 1, 2],
[9, 1,
 1, 5],
[3, 2,
 7, 9],
[3, 1,
 11, 6],
[2, 3,
 4, 8],
[8, 9,
 1, 1],
[22, 3,
 1, 1],
[1, 9,
 1, 1]]
  

或等效地,

[[7, 9, 4, 2],
[1, 8, 1, 2],
[9, 1, 1, 5],
[3, 2, 7, 9],
[3, 1, 11, 6],
[2, 3, 4, 8],
[8, 9, 1, 1],
[22, 3, 1, 1],
[1, 9, 1, 1]]

这是我尝试做的事情:

def split([[]]) -> [[]]
  split_matrix = []
  temp_map = []
  row_limit, col_limit = 2, 2

  for row in range(len(elevation_map)):
      for col in range(len(elevation_map)):
            elevation = elevation_map[row][col]
          if row < row_limit and col < col_limit:
              temp_map.append(elevation)
  split_matrix.append(temp_map)
  return split_matrix

但是,我这样做没有运气。

有没有一种方法可以不使用numpy之类的库?有可能吗?

1 个答案:

答案 0 :(得分:0)

如果我们编写一个辅助函数以将一个2x2子矩阵提取到列表中,则解决方案将变得更加整洁。之后,这是一个简单的列表推导,遍历每个子矩阵左上角的坐标。

def split_matrix(matrix, rows=2, cols=2):
    def helper(i, j):
        out = []
        for row in matrix[i:i+rows]:
            out.extend(row[j:j+cols])
        return out

    width, height = len(matrix[0]), len(matrix)
    return [
        helper(i, j)
        for i in range(0, height, rows)
        for j in range(0, width, cols)
    ]
相关问题