首页 > Python之路 > 练习矩形反转

练习矩形反转

矩形反转
方阵反转:
方阵反转:
有一个方阵,左边方阵,求其转置矩阵
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效率高


  •   正在提交中,请稍候...
      评论提交成功
    回复 的评论,点击取消回复。