我知道有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可以加快速度!