例如,考虑矩阵:
matrix=[[2,5,7],[6,3,1],[9,8,7]]
按列排序的矩阵为:
matrix_sorted=[[1,4,7],[2,5,8],[3,6,9]]
当矩阵的行数和列数不同时:
matrix2=[[7,1],[2,6],[3,5]]
排序矩阵为:
matrix2_sorted=[[1,4],[2,5],[3,6]]
当从矩阵x2中获得所有数字时,我得到列表:
numbers=[1,2,3,5,6,7]
我试着做一个新的矩阵,然后转置它:
n=3 //number of rows
m=2 //number of columns
new_matrix2=[]
for i in range(n):
temp=[]
for j in range(m):
temp.append(numbers[0])
numbers.pop(0)
new_matrix.append(temp)
new_matrix2_T=[]
for i in range(m):
column=[row[i] for row in new_matrix]
reversed_matrix.append(column)
但是转置得到一个不同大小的矩阵
new_matrix2_T=[[1,3,6],[2,5,7]]
您的数据当前在列表的列表中。
我个人认为列表的列表不是一个方便的数据结构来满足你的要求。
我建议使用numpy数组,它可以很容易地平坦化,排序,然后重塑。
不幸的是,重塑数组的标准numpy函数/方法倾向于按行填充,而不是按列填充。你可以通过对高度和宽度求反然后对矩阵求转置来解决这个问题。
import numpy as np
def sorted_by_columns(mat):
a = np.array(matrix)
h,w = a.shape
a = np.sort(a.ravel()).reshape((w, h)).T
return a
matrix=[[7,1],[2,6],[3,5]]
sorted_mat = sorted_by_columns(matrix)
print(sorted_mat)
# [[1 5]
# [2 6]
# [3 7]]
文档:
- .reshape;
- .ravel;
- .T;
- numpy.sort。