您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 查找给定矩阵的所有子矩阵

5b51 2022/1/14 8:22:02 python 字数 2061 阅读 562 来源 www.jb51.cc/python

我需要找到给定矩阵mxn的所有可能的子矩阵.我试图在python中这样做,不想使用numpy.我们可以只使用循环吗?例如:2x2矩阵Matrix = [ [1, 2], [3, 4] ] Submatrices =[ [1], [1,2],

概述

我需要找到给定矩阵mxn的所有可能的子矩阵.我试图在python中这样做,不想使用numpy.我们可以只使用循环吗?

例如:2×2矩阵

Matrix = [
          [1,2],[3,4]
         ]

Submatrices =[ [1],[1,[2],[3],[4],4],[[1],[3]],[[2],[4]],[[1,4]] ] 

Matrix = [
      [1,2,3],4,5],[5,6,7]
     ]

分为3个功能

def ContinSubSeq(lst):
  size=len(lst)
  for start in range(size):
    for end in range(start+1,size+1):
      yield (start,end)

def getsubmat(mat,start_row,end_row,start_col,end_col):
  return [i[start_col:end_col] for i in mat[start_row:end_row] ]

def get_all_sub_mat(mat):
  rows = len(mat)
  cols = len(mat[0])
  for start_row,end_row in ContinSubSeq(list(range(rows))):
    for start_col,end_col in ContinSubSeq(list(range(cols))):
      yield getsubmat(mat,end_col)

运行这个

for i in get_all_sub_mat(Matrix):
  print i

或者更简单,放入一个功能

def get_all_sub_mat(mat):
    rows = len(mat)
    cols = len(mat[0])
    def ContinSubSeq(lst):
        size=len(lst)
        for start in range(size):
            for end in range(start+1,size+1):
                yield (start,end)
    for start_row,end_row in ContinSubSeq(list(range(rows))):
        for start_col,end_col in ContinSubSeq(list(range(cols))):
            yield [i[start_col:end_col] for i in mat[start_row:end_row] ]

总结

以上是编程之家为你收集整理的python – 查找给定矩阵的所有子矩阵全部内容,希望文章能够帮你解决python – 查找给定矩阵的所有子矩阵所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶