加速NumPy的功能

mac*_*389 5 python performance numpy scientific-computing

我试图提取超过某个阈值的一维数组的所有值的索引.该数组大约为数量级1e9.

我的方法如下NumPy:

idxs = where(data>threshold) 
Run Code Online (Sandbox Code Playgroud)

这需要花费超过20分钟的时间,这是不可接受的.如何加快此功能?或者,有更快的替代品吗?

(具体而言,Mac OS X运行10.6.7,1.86 GHz Intel,4GB RAM需要很长时间.)

小智 6

尝试一个掩码阵列.这将创建相同数据的视图.

所以语法是:

 b=a[a>threshold]
Run Code Online (Sandbox Code Playgroud)

b不是一个新数组(与where不同),而是一个元素在索引中符合布尔值的视图.

例:

import numpy as np
import time

a=np.random.random_sample(int(1e9))

t1=time.time()
b=a[a>0.5]
print(time.time()-t1,'seconds')
Run Code Online (Sandbox Code Playgroud)

在我的机器上,打印 22.389815092086792 seconds


编辑

我尝试使用np.where,它也一样快.我很怀疑:你是否从数组中删除这些值?