如何对矩阵的列中的值进行排序?

时间:2019-07-18 00:19:12

标签: python python-3.x matrix

我有一个矩阵,我需要按矩阵对矩阵进行排序。

让我们说矩阵是:

98 76 66 55
77 61 43 98
1  2  100 88

输出矩阵应类似于:

1 2  43  55
77 61 66  88
98 76 100 98

有人可以帮助我为上述操作编写好的代码吗?

2 个答案:

答案 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]]