如何通过Python中行的总和按升序对矩阵进行排序?

时间:2015-05-30 02:00:02

标签: python

完全相同的问题回答here,但在MATLAB中。

我的问题是:给定矩阵,根据行的总和按升序对其进行排序。 也就是说,如果A是以下矩阵:

A = [[9, 8, 7],
     [2, 5, 7], 
     [1, 3, 4]]

因此,我会得到:

B = [[1, 3, 4],
     [2, 5, 7], 
     [9, 8, 7]]

因为A的第1行的总和是24,所以A的第2行的总和是14,第3行的总和是A 8B。因此,A的第1行将是B的第3行,A的第2行将是B的第2行,以及{3}的第3行{1}}将是A的第一行。

我正在寻找一种使用内置功能的解决方案(如果可能的话)。我不是在寻找一种算法。

2 个答案:

答案 0 :(得分:6)

有一个可用的内置函数sorted。命令

sorted(A, key=sum)

为您提供所需的输出:

[[1, 3, 4], [2, 5, 7], [9, 8, 7]]

答案 1 :(得分:3)

如果你正在使用NumPy,那就是

B = A[np.argsort(A.sum(axis=1))]

其中sum调用计算每行的总和,argsort计算最小,第二小等总和的索引,A[...]选择那些索引处的行。这假设A是NumPy数组,而不是列表列表。

要对列执行相同操作,它将是

B = A[:, np.argsort(A.sum(axis=0))]