Assuming the matrix
Matrix = [ [1, 2,3], [3, 4,5], [5,6,7] ]
Divide into 3 functions:
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,start_row,end_row,start_col,end_col)
Run this
for i in get_all_sub_mat(Matrix): print i
Or simpler, put in one function:
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] ]
source share