2

このコードを改善する最善の方法は何ですか:

def my_func(x, y):
    ... do smth ...
    return cmp(x',y') 

my_list = range(0, N)
my_list.sort(cmp=my_func)

python のリストは numpy 配列に比べて多くのメモリを消費します (6800MB 対 700MB) が、nympy.array には cmp 引数を持つソート機能がありません。

cmp 関数を使用してメモリ使用量を改善したり、numpy の配列をソートしたりする他の方法はありますか?

更新:私の現在の解決策は、整数の巨大な配列をソートし、ソート後にPythonに返すC関数(SWIGと共有)です。

しかし、Python を使用して巨大なデータセットのメモリ効率の良い並べ替えを実装する方法があることを願っています。何か案は?

4

2 に答える 2

2

配列を変換するufuncを記述できる場合は、argsortによる高速ソートを実行できます。

b = convert(a)
idx = np.argsort(b)
sort_a = a[idx]
于 2011-08-06T14:41:25.240 に答える
0

sorted別の方法として、numpy 配列でビルトインを使用できます。

>>> a = np.arange(10, 1, -1)
>>> sorted(a, cmp=lambda a,b: cmp(a,b))
[2, 3, 4, 5, 6, 7, 8, 9, 10]

インプレースではないため、6800 MB に対して 1400 MB になります。

于 2011-08-06T08:28:12.390 に答える