首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >一种有效的numpy数组阈值滤波器

一种有效的numpy数组阈值滤波器
EN

Stack Overflow用户
提问于 2011-11-03 19:52:46
回答 1查看 111.3K关注 0票数 82

我需要过滤一个数组,以删除低于某个阈值的元素。我现在的代码是这样的:

代码语言:javascript
复制
threshold = 5
a = numpy.array(range(10)) # testing data
b = numpy.array(filter(lambda x: x >= threshold, a))

问题是这会创建一个临时列表,使用一个带有lambda函数的过滤器(慢)。

由于这是一个非常简单的操作,也许有一个numpy函数可以有效地完成它,但我一直无法找到它。

我认为实现这一点的另一种方法可能是对数组进行排序,找到阈值的索引,并从该索引开始返回一个切片,但即使这种方法对于较小的输入会更快(而且无论如何都不会明显),随着输入大小的增加,它的效率肯定会逐渐降低。

有什么想法吗?谢谢!

python更新:我也做了一些测量,当输入为100.000.000个条目时,sorting+slicing的速度仍然是纯过滤器的两倍。

代码语言:javascript
复制
In [321]: r = numpy.random.uniform(0, 1, 100000000)

In [322]: %timeit test1(r) # filter
1 loops, best of 3: 21.3 s per loop

In [323]: %timeit test2(r) # sort and slice
1 loops, best of 3: 11.1 s per loop

In [324]: %timeit test3(r) # boolean indexing
1 loops, best of 3: 1.26 s per loop
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7994394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档