2

かなり高速なクイックソートを作成しようとしていますが、これは他の多くのアプリケーションで使用されています。

組み込みの filter(function, iterable) 関数は iterable 内のアイテムのリストを返し、関数に渡されると true を返し、1 つのリストに対して 1 つの条件のみをチェックする必要がある場合は、従来の for ループよりもはるかに高速です。

私が探しているのは、新しいリストを作成するだけでなく、古いリストから取得したアイテムを削除する非常に高速な (フィルターのような) 関数です。これにより、シングル ピボット クイックソートのアプリケーションでは、フィルター ステートメントを削除し、パーティション ルーチンをほぼ 2 倍高速化できます。

Pythonに組み込まれているそのような関数はありますか?numpy ではどうですか?そうでない場合、それを実装する最速の方法は何ですか?

参考までに、現在のパーティション コードは次のとおりです。

def partition(u):
    lesser = singleQuicksort(filter(lambda num: num <= u[0], u[1:]))
    greater = singleQuicksort(filter(lambda num: num > u[0], u[1:]))
    return lesser, greater
4

2 に答える 2

0

ではnumpy、一種の。それが配列のインデックスです。「フィルター」アウトする場合は、次のケースを考慮してくださいinf

a=array([1,2,3,4,inf])
a[isfinite(a)]

または 3 より小さい値

a=array([1,2,3,4,5])
a[a>3]

なぜ「一種」なのですか?インデックスを作成しても新しい配列が作成されるため、次のようになります。

>>> a=array([1,2,3,4,inf])
>>> a[isfinite(a)]
array([ 1.,  2.,  3.,  4.])
>>> id(a)
40165288 #your result will differ
>>> id(a[1])
40253288
>>> id(a[isfinite(a)][1])
39747512
>>> a[1]
2.0
>>> a[isfinite(a)][1]
2.0
于 2013-09-04T04:01:57.523 に答える