0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

numexpr:你以为numpy已经够快了,其实它还可以更快

电子设计 来源: 电子设计 作者: 电子设计 2020-12-14 23:53 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

开篇

python语言被广泛用于数据分析和机器学习。但是,由于python的底层特性,python的运行速率低一直被广泛诟病。其中,numpy和pandas的广泛使用已经将数据处理和机器学习的速率提升了几个档次。

但是,随着数据的越来越多,很多人已经不再满足numpy和pandas的速度,从而退出了一批加速优化拓展包。这篇文章主要介绍一个轻量、但是功能强大的python扩展包 ”NumExpr",看看它是如何高效解析数学公式的。

NumExpr

NumExpr的使用及其简单,只需要将原来的numpy语句使用双引号框起来,并使用numexpr中的evaluate方法调用即可。

第一步:需要引入 numexpr 和 numpy 扩展包;

/`import numexpr as ne

import numpy as np/`



第二步:创建两个numpy的array - a 和 b;

a和b两个所包含的数据个数为100万个。

当我们需要执行简单的加减乘除的时候,numexpr的效率已经得到了很好地体现,通过执行 2 * a + 3 * b,如果直接操作,需要3.39 毫秒。但是,如果我们是用ne.evaluate加速,可以将时间缩短至1.55 毫秒。

numexpr在更加复杂的数学表达式运算中,表现到底如何呢?

当我们使用如上所示的数学表达式,正常执行需要28.3 ms。而通过numexpr的加速,只需要3.03 ms。



注意,numexpr是可以识别 sin 函数的,所以我们不需要在evaluate里面写np.sin,可以直接写 sin。

总结:处理数据量越大,数学计算越复杂,则numexpr的加速效果越明显。



numpy 和 numexpr 比较

我们可以看到,当np.array的元素个数超过10e8,加速效果更加显著。

numexpr也支持逻辑表达式和复数表达式的加速,有兴趣的读者朋友可以自行比较。

numexpr 多线程加速

numexpr还有一个重要的加速利器,多线程操作。通过 ne.set/_num/_threads(1) 可以设置线程的数量,更多的线程表示程序可以同时对数学表达式进行计算。

如上所示,如果我们设置单线程,程序运行需要13.4 ms。设置了双线程,速度则可以提升一倍。

numexpr对pandas的加速
numexpr的设计主要针对的是numpy。同样的,我们知道pandas也是基于numpy开发的。自然,numexpr同样可以被用来对pandas加速。

pandas中有一个eval方法就是运用了numexpr,对pandas代码进行优化加速。

当我们构建几个pandas的dataframe,然后对它们进行运算的时候,pd.eval 可以将程序从原先的47.4 ms 加速到17.6 ms。

总结

通过以上的实例,numexpr对于numpy和pandas的加速是很显著的,尤其当数据量比较大和计算比较复杂的情况下。同时,numexpr的使用非常简单。但是,我们需要注意的是,任何加速工具都会有局限性的,并不是所有的工作都可以使用numexpr进行加速。

审核编辑 黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器学习
    +关注

    关注

    67

    文章

    8570

    浏览量

    137420
  • python
    +关注

    关注

    59

    文章

    4892

    浏览量

    90416
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    NumPy完成RISC-V向量扩展适配,SG2044平台验证RVV浮点性能优势

    在中国科学院软件研究所智能软件研究中心与如意RISC-V软件生态的持续推动下,国际主流开源科学计算库NumPy正式完成对RISC-VVector(RVV)向量扩展的优化适配,并在算能第二代服务器级
    的头像 发表于 05-15 09:03 301次阅读
    <b class='flag-5'>NumPy</b>完成RISC-V向量扩展适配,SG2044平台验证RVV浮点性能优势

    ADSP21565 dsp如何控制两个主节点,还可以用a2b_stack嘛?

    ADSP21565 dsp如何控制两个主节点(AD2428),还可以用a2b_stack嘛?
    发表于 05-13 07:40

    CAN信号提升能力(SIC)可以移除CAN共模电感吗

    了以前网络拓扑结构中的限制。甚至还可以考虑更低规格的布线解决方案或移除外部铁氧体。 这是否意味着使用具有SIC功能的CAN收发器,可以移除CAN共模电感(Common Chock)? 有哪些资料中有证据表明吗?
    发表于 04-17 10:17

    PCB别人包地包地,但别人的隔离度比你好10dB不止

    表层走线在高频的串扰那么大的啊,都拉开15H的距离了,串扰居然也只有20dB左右。不然你们以为呢?所以说表层的串扰很大,这下信了吧。因此大家才希望通过包地哪怕降低个4-5dB其实也是很大的改善了。我们
    发表于 04-13 11:21

    曙光存储助力北京大学现代农业研究院科研效率提速

    以为现代农业的战场,还只在田间地头?其实不然——真正的核心较量,早已藏进了存储数据的硬盘里。
    的头像 发表于 03-19 14:21 354次阅读

    以为它只是个铁台子?其实是电机性能的“终极考官”

    电机试验平台是评估电机性能的综合检测体系,贯穿电机设计、生产、应用全流程,确保其运行效率与可靠性。 核心组成:硬件上包括驱动系统、加载装置、高精度传感器;软件上则由自动化控制系统和数据采集分析软件构成。 能测什么:可完成从基础的电压、电流、电阻测量,到复杂的效率、温升、齿槽转矩、耐久性及路谱模拟等测试。 电机试验平台并非千篇一律,针对不同类型和行业的电机,其测试平台也有很大差异。下面是一些常见的类型和应用实例: 旋转电机试验平台 测试对象:新能源汽车驱动电机、工业伺服电机、家用电器电机。 主要特点:测试项目全和面,覆盖电气特性、负载性能、温升等。 行业应用实例: 新能源汽车:用于模拟路谱加载,评估能效与耐久性(如GB/T 18488标准测试)。 工业伺服:可进行毫秒级动态响应测试,优化关节电机重复精度。 科研机构:如华中科技大学建成覆盖5kW-250kW功率、转速比较高15000rpm的系列化平台,用于高性能电机研究 。 高等院校:浙江大学拥有价值412.68万元的永磁牵引电机测试台,用于电机设计与优化 。 直线电机试验平台 测试对象:平板型永磁同步直线电机。 主要特点:专注于推力、齿槽力、反电势常数等直线电机和关键参数测试。 行业应用实例: 科研机构:中国科学院宁波材料所提供直线电机测试服务,可测比较大连续推力达14700N,推力测试精度1% 。 仿真与HIL试验平台 测试对象:电机控制器、复杂电机驱动系统。 主要特点:采用功率硬件在环(PHIL)技术,可模拟不同电机类型,实现快速控制原型和系统级测试 。 行业应用实例: 高校/研发:OPAL-RT的OP1630仿真测试台,可在实验室环境下高和效、低成本地模拟5kW、15000rpm以内的多种电机运行状态 。 关键零部件专用平台 测试对象:伺服电机、减速器、电池等机器人关键零部件。 主要特点:除了电机本身,还集成对减速器(背隙、刚度)、电池等部件的综合测试能力。 行业应用实例: 科研机构:中国科学院沈阳自动化研究所拥有伺服电机测试系统(比较大扭矩100Nm)和减速器测试系统(比较大加载10000Nm)。 需要注意的是,不同试验平台在测量精度(如扭矩精度±0.1% F.S. )、功率范围(从几瓦到兆瓦级 )和转速能力(比较高15000rpm以上 )上差异巨大,具体选型需结合实际测试需求。
    发表于 03-14 14:35

    为什么90%的校园用电项目都做不好?问题其实出在插座上

    智能插座,其实是整个系统的“数据入口”。
    的头像 发表于 03-04 11:32 170次阅读

    调试RK3588必看!这个临时设备树文件,藏着要的所有配置答案

    ”——rk3588-evb7-v11-linux.dtb.dts.tmp。不少人以为它是编译过程的“临时垃圾”,看完这篇就知道:它其实是解决硬件适配、内核启动问题的“调试钥匙”。
    的头像 发表于 02-03 15:55 1753次阅读
    调试RK3588必看!这个临时设备树文件,藏着<b class='flag-5'>你</b>要的所有配置答案

    RT-Thread软件包,RyanMqtt 2.0 发布,全面重构:更轻、更快、更安全、更可靠 | 技术集结

    RyanMqtt2.0RT-Thread社区精品软件包RyanMqtt发布2.0新版本!更轻、更快、更安全、更可靠,为的物联网连接注入新动力。
    的头像 发表于 12-09 18:27 6087次阅读
    RT-Thread软件包,RyanMqtt 2.0 发布,全面重构:更轻、<b class='flag-5'>更快</b>、更安全、更可靠 | 技术集结

    BNC线束 | 精准传输,让信号更快一步

    通信、测试、工业控制 还是 科研实验, 德索都能为提供值得信赖的 BNC线束解决方案 —— 让信号更稳,让数据更快
    的头像 发表于 11-13 16:59 907次阅读
    BNC线束 | 精准传输,让信号<b class='flag-5'>更快</b>一步

    除了云端,电能质量在线监测装置的数据还可以存储在哪里?

    除了云端,电能质量在线监测装置的数据还可存储在 装置内置存储、外接存储设备、本地服务器 / 数据中心 三类本地存储载体中,不同方式的容量、可靠性、适用场景差异较大,需结合需求(如短期备份、长期集中
    的头像 发表于 10-30 09:48 437次阅读

    为什么开关二极管速度不够快

    在电子电路设计中,二极管不仅用作整流和限幅,还常常作为开关元件应用在高频和高速电路里。此类二极管被称为开关二极管。它们的核心特性是能够快速完成导通与关断,从而不影响电路的工作速度。然而,在实际应用中
    的头像 发表于 09-10 10:01 933次阅读
    为什么开关二极管速度不<b class='flag-5'>够快</b>?

    yolov11转kmodel,numpy是要降级为1.x吗?

    python3.9,yolo是最新的稳定版,和yolo捆绑pip安装的numpy是2.0.1 错误日志
    发表于 08-11 08:16

    全新原装福禄克FLUKE754过程校验仪

    捕获数据。当然,它还可帮助您满足 ISO 9000、FDA、EPA 和 OSHA 法规等多项严格标准。 福禄克 754 记录过程校准仪-HART:更智能。更快捷。 新环境拍照苛刻环境下更易使用 HART
    发表于 07-24 10:45

    生活处处有晶振,正被温柔“控场”

    一个清晨,不知不觉已经依赖了几十颗默默工作的晶振。它们如同精准的隐形齿轮,驱动着我们身边几乎每一件电子设备。石英晶振,这个看似陌生的名字,其实早已融入现代生活的
    的头像 发表于 07-24 09:37 701次阅读
    生活处处有晶振,<b class='flag-5'>你</b>正被温柔“控场”