转置矩阵
矩阵一
按照下边的矩阵进行转换
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)