2015-06-22 63 views
0

我有一個數組形式的A如下:如何按行排序數組?

A = [[ 4 3 2 1] 
    [ 8 7 6 5] 
    [12 11 10 9] 
    [16 15 14 13]] 

我想排序這個數組按行。所需的輸出是:

A = [[ 1 2 3 4] 
    [ 5 6 7 8] 
    [ 9 10 11 12] 
    [13 14 15 16]] 

我使用下面的代碼(但它不工作)嘗試:

import numpy as np 
A = np.array([[4, 3, 2, 1], [8, 7, 6, 5], [12, 11, 10, 9], [16, 15, 14, 13]]) 
print A[np.lexsort(A, axis = 1)] 

我怎麼排序這個數組按行?

+1

你應該讓你的代碼在語法上有效。 – juanchopanza

+0

@ juanchopanza絕對。但你怎麼能期望那裏的逗號失蹤,而不是括號剩餘? – Wolf

+1

一個'array'只有*一個*行,對嗎? – Wolf

回答

3

目前尚不清楚你的意思是「按行排序」,但你似乎想在陣列,您可以通過遍歷它和排序每個元素做的元素進行排序:

for i in A: i.sort() 

如果你也想外陣列本身進行排序,然後,嗯,有點吧:

A.sort() 
+1

我不會添加關於外部數組的這個(令人困惑的)註釋。提問者已經添加了預期的行爲。 – Wolf

+0

@狼我覺得OP沒有指定要求。 – juanchopanza

0
A = [[ 4, 3, 2, 1], 
    [12, 11, 10, 9], 
    [ 8, 7, 6, 5], 
    [16, 15, 14, 13]] 
for i in A: 
    i.sort() 

A.sort() 
print A 

我認爲逐行意味着你也想排序外列表

+1

* lambda magic *有什麼好處? – Wolf

+0

@狼 - 對不起,我不知道:) – k4vin

+0

@Wolf順便說一句,我不是代表狩獵,我偶然發佈了相同的答案。我現在應該刪除它嗎?請賜教我對於我來說真的很陌生。 – k4vin

0

兩個不同的答案,無論是單行,如下:

sorted_A_1 = sorted(sorted(i) for i in A) 
sorted_A_2 = [sorted(i) for i in sorted(A)] 

雖然你可能想簡單地修改現有的名單,這些都產生一個新的列表。第一個管道將A中的每個列表排序到排序函數的結果,第二個只是列表理解。另外,雖然這些可能並不比已經發布的答案更清楚,但我個人認爲,看到解決給定問題的不同方法是有幫助的!

1

Numpy的sort有一個axis參數,可用於指定哪個軸被排序。

import numpy as np 
A = np.array([[4, 3, 2, 1], [8, 7, 6, 5], [12, 11, 10, 9], [16, 15, 14, 13]]) 

A.sort(axis=1) 

這給:

[[ 1 2 3 4] 
[ 5 6 7 8] 
[ 9 10 11 12] 
[13 14 15 16]] 

sort默認使用axis作爲數組的最後一個軸,所以這裏會1,所以你並不需要在這種情況下,指定axis=1