我有一个矩阵,我需要按矩阵对矩阵进行排序。
让我们说矩阵是:
98 76 66 55
77 61 43 98
1 2 100 88
输出矩阵应类似于:
1 2 43 55
77 61 66 88
98 76 100 98
有人可以帮助我为上述操作编写好的代码吗?
答案 0 :(得分:0)
我假设您的矩阵定义为list
中的list
。我的基本前提是对list
进行排序很简单。您可以只使用list.sort()
。在这里,我对矩阵进行转置,以便其行需要排序,然后遍历各行进行排序。
import numpy as np
def sortCols(inList):
temp = np.array(inList).T.toList()
for subList in temp:
subList.sort()
inList = np.array(temp).T.toList()
return inList
答案 1 :(得分:0)
如果矩阵是2D列表,则可以执行此操作-无需第三方模块-如下所示。
它的工作原理是首先转置矩阵(将其翻转到对角线上),以使列成为行,对它们进行排序,然后对中间结果进行转置,从而将行转换回列并撤消初始交换。 Python的内置zip()
函数与它的(也内置的)sorted()
函数结合使用来进行转置,以按数值顺序放置值。
matrix = [[98, 76, 66, 55],
[77, 61, 43, 98],
[1, 2, 100, 88]]
print('before:')
print(matrix) # -> [[98, 76, 66, 55], [77, 61, 43, 98], [1, 2, 100, 88]]
matrix = [list(row) for row in zip(*(sorted(col) for col in zip(*matrix)))]
print('after:')
print(matrix) # -> [[1, 2, 43, 55], [77, 61, 66, 88], [98, 76, 100, 98]]