转置矩阵

矩阵一

按照下边的矩阵进行转换

1   2   3                       1   4   7
4   5   6   转置为         2   5   8
7   8   9                       3   6   9

把矩阵数据转换为相应的数据结构,使用list存放每一行数据。

方法一:

直接修改原数据

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for i in range(len(matrix)):
    for j in range(i):
        matrix[j][i], matrix[i][j] = matrix[i][j], matrix[j][i]  # 数据交换
        # print(matrix)
print(matrix)
# 输出
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

方法二:

使用新的列表,不修改原数据

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_matrix = []
for i in range(len(matrix)):
    new_matrix.append([])
    for j in range(len(matrix[0])):
        new_matrix[i].append(0)  # 最后生成 [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
for i, m in enumerate(matrix):
    for j, n in enumerate(m):
        new_matrix[j][i] = matrix[i][j]  # 直接赋值
print(new_matrix)

矩阵二

按照下边的矩阵进行转换

1   2   3                       1   4
                转置为        2   5
4   5   6                       3   6

转换为相应的数据结构,初始数据结构为[[1, 2, 3], [4, 5, 6]],需要转换为[[1, 4], [2, 5], [3, 6]],观察后发现这是把2行3列的矩阵转换为3行2列的矩阵。

方法一:

matrix = [[1, 2, 3], [4, 5, 6]]
new_matrix = []
for i in range(3):  # 循环3次,凑行
    column = []
    for j in range(2): # 每行数据有2个,即有两列数据
        column.append(matrix[j][i])
    new_matrix.append(column)
print(new_matrix)
# 输出
[[1, 4], [2, 5], [3, 6]]    

方法二:

matrix = [[1, 2, 3], [4, 5, 6]]
new_matrix = []
for column in matrix:
    for index, item in enumerate(column):
         if len(new_matrix) < 3:
             new_matrix.append([])  # 凑 [[], [], []]
         new_matrix[index].append(item) # [[1], [2], [3]]
print(new_matrix)

方法三:

初始矩阵[[1, 2, 3], [4, 5, 6]],与目标矩阵[[1, 4], [2, 5], [3, 6]]的各个值的索引是完全相反的。

矩阵元素    原矩阵索引   目标矩阵索引
1                   [0, 0]      [0, 0]
2                   [0, 1]      [1, 0]
3                   [0, 2]      [2, 0]
4                   [1, 0]      [0, 1]
5                   [1, 1]      [1, 1]
6                   [1, 2]      [2, 1]

所以可以先开辟目标矩阵的规模

matrix = [[1, 2, 3], [4, 5, 6]]
new_matrix = []
for i in range(len(matrix[0])):
    new_matrix.append([])
    for j in range(len(matrix)):
        new_matrix[i].append(0)  # 填充0,最后为 [[0, 0],[0, 0],[0, 0]]
# 想办法填充数据
for i, m in enumerate(matrix):
    for j, n in enumerate(m): # m为[1, 2, 3]时
        new_matrix[j][i] = matrix[i][j]
print(new_matrix)