使用 numpy 对数组进行高效阈值过滤

2024-04-14

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

threshold = 5
a = numpy.array(range(10)) # testing data
b = numpy.array(filter(lambda x: x >= threshold, a))

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

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

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

Update:我也进行了一些测量,当输入为 100.000.000 个条目时,排序+切片仍然是纯 python 过滤器的两倍。

r = numpy.random.uniform(0, 1, 100000000)

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

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

%timeit test3(r) # boolean indexing
# 1 loops, best of 3: 1.26 s per loop

b = a[a>threshold]这应该做

我测试如下:

import numpy as np, datetime
# array of zeros and ones interleaved
lrg = np.arange(2).reshape((2,-1)).repeat(1000000,-1).flatten()

t0 = datetime.datetime.now()
flt = lrg[lrg==0]
print datetime.datetime.now() - t0

t0 = datetime.datetime.now()
flt = np.array(filter(lambda x:x==0, lrg))
print datetime.datetime.now() - t0

I got

$ python test.py
0:00:00.028000
0:00:02.461000

http://docs.scipy.org/doc/numpy/user/basics.indexing.html#boolean-or-mask-index-arrays http://docs.scipy.org/doc/numpy/user/basics.indexing.html#boolean-or-mask-index-arrays

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 numpy 对数组进行高效阈值过滤 的相关文章

随机推荐

  • 两个日期之间的输出 mysql [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我需要像这样在MYSQL中输出 记录
  • 在 mongodb 中创建安全数据库

    我想在 mongodb 中创建安全的数据库 安全意味着应用程序必须传递用户名 密码才能连接到我的 mongodb 数据库 来自 Mongo Java 教程 MongoDB 可以在安全模式下运行 其中通过名称和密码身份验证控制对数据库的访问
  • 模拟Android AssetManager

    我有一段代码接受 Context 并将该上下文传递给私有方法 私有方法调用 getAssets open 来读取我的应用程序的资产文件夹中存在的文件 public void methodA Context ctx throws IOExce
  • 将服务器端 MVC 与 Backbone.js 相结合

    我将 NET MVC 用于所有服务器端逻辑并提供初始页面 但我的应用程序在客户端非常繁重 因此我采用了 Backbone JS 事实证明它非常有用 但我不确定如何构建我的系统以整合这两种技术 在我看来 我有两个选择 在服务器端从 MVC 中
  • ios中如何将字节数组转换为图像

    今天我的任务是将字节数组转换为图像 首先 我尝试将图像转换为字节数组 为了将图像转换为字节数组 我们首先要做的就是转换该特定图像 UIImage to NSData 然后我们将其转换为NSData到字节数组 这里我将给出示例代码 只需浏览
  • 为什么enable_shared_from_this有一个非虚拟析构函数?

    我有一个宠物项目 我用它来试验 C 11 的新功能 虽然我有使用 C 的经验 但我对 C 还很陌生 为了训练自己采用最佳实践 除了大量阅读之外 我启用了一些严格的编译器参数 使用 GCC 4 4 1 std c 0x Werror Wall
  • Twig 中的 {{ exception.message }} 不渲染 HTML

    我有这个控制器在哪里 Exception被提出了 我还没弄清楚哪个SF2Exception尚未使用 在一定条件下 就这个
  • Django - 将参数传递给 CBV 装饰器的正确方法?

    文档功能应用装饰器的不错选择 例如login required基于类的视图 https docs djangoproject com en dev topics class based views intro decorating the
  • ANDROID CAMERA:获取参数失败(空参数)

    您好 我仅在棒棒糖以下的操作系统版本中遇到此问题 对此进行了大量搜索 但没有找到正确的解决方案 我认为问题出在操作系统版本上 它在 5 中工作正常 我的代码是 private void setCameraPhotoQuality Camer
  • 设置 li 标签内 的字体颜色

    我的标记如下所示 div class c1 li class c2 a href blah a li div 我希望文字 blah 是红色的 c1 在其他地方使用 所以我想在不影响其他标记的情况下尽可能深入 在您的 css 文件中使用此样式
  • C#:绘制自己的条形图

    我正在尝试通过绘制一个简单的条形图C 但我从未尝试过 Graphics 和 Drawing 命名空间 我想生成一个 开始 和 结束 图形 然后以某种方式重复图像 以显示 长度 但我不知道如何做到这一点 如果您能指出正确的方向和 或您有示例代
  • 尽管包含必需的标头,但仍出现“‘sockaddr_in’未声明(在此函数中首次使用)”错误

    include
  • 如何将列表转换为可枚举

    我的以下代码有问题 public IEnumerable
  • 为什么 php 脚本速度变慢?

    我正在编写迁移脚本 该脚本从一个 MySQL 数据库中选择数据并通过原则导入到另一个 MySQL 数据库中 问题是 在创建每个实体块之后 我的脚本速度就会变慢 导入前 100 篇文章大约需要 5 秒 接下来的 100 篇文章需要 7 秒 接
  • T-SQL 中的随机加权选择

    如何根据所有候选行的应用权重在 T SQL 中随机选择表行 例如 我在表中有一组行的权重分别为 50 25 和 25 加起来为 100 但不是必须的 我想随机选择其中一个 其统计结果相当于相应的行重量 Dane 的答案包括以引入平方律的方式
  • 使用 ionic zip 时压缩失败

    我正在使用最新版本的 ionic zip 版本 1 9 1 8 我已经设置了 ionic zip 的属性ParallelDeflateThreshold 0 过去两个月 压缩机制工作得很好 突然 它停止工作了 压缩线程挂起 ionic zi
  • bash 是否存在内存泄漏?

    我在跑bashv4 4 19 1 在 Ubuntu 18 10 上发布 如果我跑valgrind在一个简单的脚本上 或者甚至bash version 我发现我确实丢失了 12 个字节的内存 但仍然可以访问大约 46kB 的内存 仍然可访问的
  • 删除 Pig 输出中的括号和逗号

    目前我的输出如下 130 1 131 1 132 1 133 1 137 1 138 2 139 1 140 1 142 2 143 1 我想要这样 130 1 131 1 132 1 我的代码如下 A LOAD user links sm
  • xcode9 / SceneKit - .dae 文件未加载到 SCNScene 中 - 返回 nil

    我正在尝试使用以下代码将 dae 文件加载到 SCNScene 中 let solutionScene SCNScene named art scnassets level1 dae print solutionScene rootNode
  • 使用 numpy 对数组进行高效阈值过滤

    我需要过滤一个数组以删除低于某个阈值的元素 我当前的代码是这样的 threshold 5 a numpy array range 10 testing data b numpy array filter lambda x x gt thre