5

我正在尝试提取超过某个阈值的一维数字数组的所有值的索引。该数组是1e9长的顺序。

我的方法如下NumPy

idxs = where(data>threshold) 

这需要 20 分钟以上的时间,这是不可接受的。我怎样才能加快这个功能?或者,有更快的替代方案吗?

(具体来说,在运行 10.6.7、1.86 GHz Intel、4GB RAM 的 Mac OS X 上需要很长时间。)

4

1 回答 1

6

尝试一个掩码数组。这将创建相同数据的视图。

所以语法是:

 b=a[a>threshold]

b 不是一个新数组(与 where 不同),而是 a 的视图,其中元素与索引中的布尔值相遇。

例子:

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 进行了同样的尝试,并且速度一样快。我很怀疑:你是从数组中删除这些值吗?

于 2013-02-09T21:41:30.120 回答