2

を使用してさまざまなデータ型を受け入れることができる多次元配列を宣言しましたnumpy

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

最初の配列には文字列があり、2番目の配列には数値があります。数字に基づいて両方の列を並べ替えたい...

これを行う方法のような簡単な方法はありsort()ますか?

4

3 に答える 3

4

代わりに、配列を構造化配列にすることを検討してください。

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

次に、特定のキーで並べ替えることができます。

np.sort(arr, order='num')
于 2013-01-31T21:11:57.737 に答える
3

2番目の列を引数で並べ替えてから、行でいわゆる「ファンシーインデックス」を使用できます。

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]]
于 2013-01-31T21:04:00.080 に答える
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つまり、wrt引数をインデックス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)

最後の行が要求されたソートを実行します。

于 2013-01-31T21:25:00.780 に答える