我宣佈一個多維數組,可以接受不同的數據類型使用numpy
排序一個python多維數組?
count_array = numpy.empty((len(list), 2), dtype = numpy.object)
第一陣列得到串和第二已得到號碼。我想根據數字對兩列進行排序...
有沒有更簡單的方法可以像sort()
這樣做?
我宣佈一個多維數組,可以接受不同的數據類型使用numpy
排序一個python多維數組?
count_array = numpy.empty((len(list), 2), dtype = numpy.object)
第一陣列得到串和第二已得到號碼。我想根據數字對兩列進行排序...
有沒有更簡單的方法可以像sort()
這樣做?
你可以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]]
考慮對你的陣列結構數組代替:
count_array = np.empty((len(list),), dtype=[('str', 'S10'), ('num', int)])
然後,您可以按特定鍵排序:
np.sort(arr, order='num')
我提出這一個:
首先,像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)
與最後一行做請求排序。