2013-01-31 92 views
2

我宣佈一個多維數組,可以接受不同的數據類型使用numpy排序一個python多維數組?

count_array = numpy.empty((len(list), 2), dtype = numpy.object)

第一陣列得到串和第二已得到號碼。我想根據數字對兩列進行排序...

有沒有更簡單的方法可以像sort()這樣做?

回答

3

你可以argsort第二列,然後用所謂的「神奇索引」的行:

import numpy as np 
count_array = np.array([('foo',2),('bar',5),('baz',0)], dtype = np.object) 
print(count_array) 
# [[foo 2] 
# [bar 5] 
# [baz 0]] 

idx = np.argsort(count_array[:, 1]) 
print(idx) 
# [2 0 1] 

print(count_array[idx]) 
# [[baz 0] 
# [foo 2] 
# [bar 5]] 
4

考慮對你的陣列結構數組代替:

count_array = np.empty((len(list),), dtype=[('str', 'S10'), ('num', int)]) 

然後,您可以按特定鍵排序:

np.sort(arr, order='num') 
0

我提出這一個:

首先,像unutbu,我會用numpy.array建立列表

import numpy as np 
count_array = np.array([('foo',2),('bar',5),('baz',0)], dtype = np.object) 

然後,我用那種operator.itemgetter

import operator 
newlist = sorted(count_array, key=operator.itemgetter(1)) 

這意味着:排序count_array w.r.t.索引爲1的參數,即整數值。

輸出是

[array([baz, 0], dtype=object), array([foo, 2], dtype=object), array([bar, 5], dtype=object)] 

,我可以重新排列。我這樣做與

np.array([list(k) for k in newlist], dtype=np.object) 

和我得到相同格式的numpy的數組作爲前

array([[baz, 0], 
     [foo, 2], 
     [bar, 5]], dtype=object) 

最後,整個代碼看起來像

import numpy as np 
import operator 

count_array = np.array([('foo',2),('bar',5),('baz',0)], dtype = np.object) 

np.array([list(k) for k in sorted(count_array, key=operator.itemgetter(1))], dtype=np.object) 

與最後一行做請求排序。