2014-03-04 53 views
2

如果我有Python中的2D名單,我可以輕鬆地排序每個子列表的這樣的中間值:排序二維數組numpy的由行的中間值

import numpy as np 
a = [[1,2,3],[1,1,1],[3,3,3,]] 
a.sort(key=lambda x: np.median(x)) 
print a 

屈服...

[[1, 1, 1], [1, 2, 3], [3, 3, 3]] 

有沒有辦法做到這一點與numpy數組沒有將其轉換爲常規python列表?

a = np.array([[1,2,3],[1,1,1],[3,3,3,]]) 
a.sort(key=lambda x: np.median(x)) 
+1

旁白:你可以寫'鍵= np.median'而不是'拉姆達X:np.median(X) '。不需要額外的間接層。 – DSM

+0

好點!出於某種奇怪的原因,這並沒有發生在我身上。 –

回答

3

我猜numpythonic方式是使用花式索引:

>>> a = np.array([[1,2,3],[1,1,1],[3,3,3,]]) 
>>> a[np.median(a,axis=1).argsort()] 
array([[1, 1, 1], 
     [1, 2, 3], 
     [3, 3, 3]])