练习矩形反转
矩形反转
方阵反转:
方阵反转: 有一个方阵,左边方阵,求其转置矩阵 1 2 3 1 4 7 4 5 6 ==>> 2 5 8 7 8 9 3 6 9 规律:对角线不动,a[i][j] <=> a[j][i],而且到了对角线,就停止,去做一下,对角线上的元素不动 #定义一个方阵: 1 2 3 1 4 7 4 5 6 ==>> 2 5 8 7 8 9 3 6 9 法一: matrix = [[1,2,3],[4,5,6],[7,8,9]] print(matrix) count = 0 for i, row in enumerate(matrix): for j, col in enumerate(row): if i < j: temp = matrix[i][j] matrix[j][j] = matrix[j][i] matrix[j][i] = temp count += 1 print(matrix) print(count) 法二: matrix = [[1,2,3],[4,5,6],[7,8,9]] lenth(matrix) count = 0 for i in range(lenth): for j in range(i): #j<i arr[i][j],arr[j][i] = arr[j][i],arr[i][j] count += 1 print(matrix) print(count)
任意矩阵反转
任意矩阵反转: 有一个任意矩阵,求其转置矩阵,这样一个矩阵但不是方阵 1 2 3 1 4 4 5 6 << ==>> 2 5 3 6 这样一个矩阵但不是方阵 算法一: 过程就是,烧苗matrix第一行,在tm的第一列从上至下附加,然后在第二列附加 举例:扫描第一行1,2,3,加入到tm的第一列,然后扫描第二行4,5,6,追加到tm的第二列 matrix = [[1,2,3],[4,5,6]] tm = [] count = 0 for row in matrix: for i,col in enumerte(row): if len(tm) < i + 1:#matrix有i列就要为tm创建i行 tm.append([]) tm[i].append(col) count += 1 print(matrix) print(tm) 算法2: 一次性开辟好目标矩阵内存空间,那么原矩阵的元素直接移动到转账矩阵的对称坐标可以了 matrix = [[1,2,3],[4,5,6]] tm = [[0 for col in rnage(len(matrix))] for row in range(len(matrix[0]))] count = 0 for i , row in enumerate(tm): for j ,col in enumerate(row): tm[i][j] = matrix[j][i] count += 1 print(matrix) print(tm) print(count) 测试发现,其实只要增加到4*4开始,方法二效率更高,矩阵规模越大,先开辟空间比后append效率高