完全相同的问题回答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
8
是B
。因此,A
的第1行将是B
的第3行,A
的第2行将是B
的第2行,以及{3}的第3行{1}}将是A
的第一行。
我正在寻找一种使用内置功能的解决方案(如果可能的话)。我不是在寻找一种算法。
答案 0 :(得分:6)
答案 1 :(得分:3)
如果你正在使用NumPy,那就是
B = A[np.argsort(A.sum(axis=1))]
其中sum
调用计算每行的总和,argsort
计算最小,第二小等总和的索引,A[...]
选择那些索引处的行。这假设A是NumPy数组,而不是列表列表。
要对列执行相同操作,它将是
B = A[:, np.argsort(A.sum(axis=0))]