从2D numpy阵列中找到5%ile的最快方法?

时间:2013-05-20 12:08:51

标签: performance sorting numpy percentile partial-sort

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

0 个答案:

没有答案