我正在尝试提取超过某个阈值的一维数组的所有值的索引。该数组大约为1e9
长。
我的方法如下NumPy
:
idxs = where(data>threshold)
这需要花费超过20分钟的时间,这是不可接受的。如何加快此功能?或者,有更快的替代方案吗?
(具体而言,Mac OS X运行10.6.7,1.86 GHz Intel,4GB RAM需要很长时间。)
答案 0 :(得分:6)
尝试mask array。这将创建相同数据的视图。
所以语法是:
b=a[a>threshold]
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')
在我的机器上,打印22.389815092086792 seconds
修改的
我和np.where尝试过同样的事情,而且速度一样快。我很怀疑:你是否从数组中删除这些值?