2015-05-30 147 views
3

回答完全相同的問題here但在MATLAB中。如何按升序對Python中的行進行排序來對矩陣進行排序?

我的問題是這樣的:給定一個矩陣,按升序排序它的行數。 也就是說,如果A是下面的矩陣:

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

,我會得到:

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

因爲A第1行的總和24的第二行的總和A14,並且A的第三行的總和是8。因此,B的第1行將是A的第3行,B的第2行將是A的第2行,並且B的第3行將是第1行A

我正在尋找使用內置函數(如果可能)的解決方案。我不想爲此尋找一種算法。

+0

使用列表對象的'sort'方法(或'sorted'自由功能),並通過'sum'作爲'key'。所以'排序(A,鍵=總和)'應該工作(或類似的東西,我沒有測試過)。 –

回答

6

有一個內置的功能,sorted,可用的技巧。該命令

​​

爲您提供了所需的輸出:

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

謝謝。如果我想使用列的總和? – drzbir

+0

然後,您可以先調換矩陣,然後應用相同的功能。 – Cleb

+0

謝謝。我錯過了,我的壞。 – drzbir

3

如果你使用NumPy的工作,這將是

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

其中sum調用計算每一行的總和,argsort計算最小,次最小等和的索引,並且A[...]選擇那些索引處的行。這是假設A是NumPy數組,而不是列表的列表。

做與列是相同的,這將是

B = A[:, np.argsort(A.sum(axis=0))] 
相關問題