1

我知道有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 毫秒(对于我的实时应用程序来说太慢了)。

尝试堆:

import heapq
start = time.time() ; temp = heapq.nsmallest(int(640*480*.05),a.flatten())[-1] ; print time.time()-start

在我的系统上花费 300 毫秒;我希望 heapq 可以加快速度!

4

0 回答 0