があることは知っていますがnumpy.percentile(myArray,5)
、バックグラウンドでこれが最初に配列の完全な並べ替えを行うことを理解しています。これは、最小の 5% の値のみを並べ替える必要がある場合は非効率的です。また、ヒープソートアプローチがこの部分ソートの問題に適していることも読みましたが、2D numpy 配列で機能する実装が見つからないようです。
これが私が試したことです:
import numpy, time
#create some fake data (like an opencv greyscale image)
a = numpy.random.randint(0,256,640*480).reshape([640,480]).astype('uint8')
#time the numpy.percentile approach
start = time.time() ; temp = numpy.percentile(a,5) ; print time.time()-start
私のシステムでは約 15 ミリ秒かかります (私のリアルタイム アプリケーションには遅すぎます)。
heapq を試す:
import heapq
start = time.time() ; temp = heapq.nsmallest(int(640*480*.05),a.flatten())[-1] ; print time.time()-start
私のシステムでは 300 ミリ秒かかります。heapq が物事をスピードアップできることを願っています!