当前位置: 首页 > news >正文

【附代码】NumPy加速库NumExpr(大数据)

文章目录

    • 相关文献
    • 测试电脑配置
    • 数组加减乘除
    • 数组乘方
    • Pandas加减乘除
    • 总结

作者:小猪快跑

基础数学&计算数学,从事优化领域5年+,主要研究方向:MIP求解器、整数规划、随机规划、智能优化算法

如有错误,欢迎指正。如有更好的算法,也欢迎交流!!!——@小猪快跑

相关文献

  • NumExpr Documentation Reference — numexpr 2.8.5.dev1 documentation

测试电脑配置

博主三千元电脑的渣渣配置:

CPU model: AMD Ryzen 7 7840HS w/ Radeon 780M Graphics, instruction set [SSE2|AVX|AVX2|AVX512]
Thread count: 8 physical cores, 16 logical processors, using up to 16 threads

数组加减乘除

我们计算 2 * a + 3 * b,发现在数据量较大时候,NumExpr明显快于NumPy
在这里插入图片描述

import perfplot
from matplotlib import pyplot as plt
import numpy as np
import numexpr as nedef numpy_add(a, b):return 2 * a + 3 * bdef numexpr_add(a, b):return ne.evaluate("2 * a + 3 * b")if __name__ == '__main__':b = perfplot.bench(setup=lambda n: (np.random.rand(n), np.random.rand(n)),kernels=[numpy_add,numexpr_add,],n_range=[2 ** k for k in range(25)],xlabel="length of DataFrame",)plt.figure(dpi=300)b.save(f"arr_add.png")b.show()

数组乘方

我们计算 2 * a + b ** 10,发现在数据量较大时候,NumExpr明显快于NumPy
在这里插入图片描述

import perfplot
from matplotlib import pyplot as plt
import numpy as np
import numexpr as nedef numpy_power(a, b):return 2 * a + b ** 10def numexpr_power(a, b):return ne.evaluate("2 * a + b ** 10")if __name__ == '__main__':b = perfplot.bench(setup=lambda n: (np.random.rand(n), np.random.rand(n)),kernels=[numpy_power,numexpr_power,],n_range=[2 ** k for k in range(25)],xlabel="length of DataFrame",)plt.figure(dpi=300)b.save(f"arr_power.png")b.show()

Pandas加减乘除

我们计算 (a + b) / (c - 1),发现在数据量较大时候,NumExpr明显快于Pandas

在这里插入图片描述

import pandas as pd
import perfplot
from matplotlib import pyplot as plt
from numpy.random._examples.cffi.extending import rng
import numexpr as nedef pandas_add(df):return (df['A'] + df['B']) / (df['C'] - 1)def numexpr_add(df):return df.eval('(A + B) / (C - 1)')def numpy_arr_add(df):a = df['A'].valuesb = df['B'].valuesc = df['C'].valuesreturn (a + b) / (c - 1)def numexpr_arr_add(df):a = df['A'].valuesb = df['B'].valuesc = df['C'].valuesreturn ne.evaluate("(a + b) / (c - 1)")if __name__ == '__main__':b = perfplot.bench(setup=lambda n: pd.DataFrame(rng.random((n, 3)), columns=['A', 'B', 'C']),kernels=[pandas_add,numexpr_add,numpy_arr_add,numexpr_arr_add,],n_range=[2 ** k for k in range(25)],xlabel="length of DataFrame",)plt.figure(dpi=300)b.save(f"pandas_add.png")b.show()

总结

总体来说在大数据下会有多倍的性能提升。但我们也容易观察到,就算10e8量级的数据,进行一次运算的时间也不超过1秒。一般计算次数多,数据量大,对速度有要求的场景下可以使用。

相关文章:

  • 微信小程序上传代码教程
  • C#,十进制展开数(Decimal Expansion Number)的算法与源代码
  • linux查看当前连接的IP
  • 新版MQL语言程序设计:键盘快捷键交易的设计与实现
  • 【大厂AI课学习笔记】1.5 AI技术领域(1)计算机视觉
  • 【安卓操作系统——讲解】
  • ubuntu22.04安装部署03: 设置root密码
  • 【数据分析】Excel中的常用函数公式总结
  • react+antd+CheckableTag实现Tag标签单选或多选功能
  • 《动手学深度学习(PyTorch版)》笔记7.2
  • React 错误边界组件 react-error-boundary 源码解析
  • 实战案例:将已有的 MySQL8.0 单机架构变成主从复制架构
  • 【Flink入门修炼】1-2 Mac 搭建 Flink 源码阅读环境
  • 【ARM 嵌入式 编译系列 2.7 -- GCC 编译优化参数详细介绍】
  • 我的docker随笔43:问答平台answer部署
  • canvas 五子棋游戏
  • HTML中设置input等文本框为不可操作
  • Node + FFmpeg 实现Canvas动画导出视频
  • Rancher如何对接Ceph-RBD块存储
  • SQLServer之创建显式事务
  • vue-router的history模式发布配置
  • 产品三维模型在线预览
  • 创建一个Struts2项目maven 方式
  • 读懂package.json -- 依赖管理
  • 番外篇1:在Windows环境下安装JDK
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 栈实现走出迷宫(C++)
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 树莓派用上kodexplorer也能玩成私有网盘
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • (13):Silverlight 2 数据与通信之WebRequest
  • (C++20) consteval立即函数
  • (pojstep1.3.1)1017(构造法模拟)
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (过滤器)Filter和(监听器)listener
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (论文阅读40-45)图像描述1
  • (十)c52学习之旅-定时器实验
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET CLR基本术语
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .net专家(高海东的专栏)
  • []串口通信 零星笔记
  • [20180224]expdp query 写法问题.txt
  • [Delphi]一个功能完备的国密SM4类(TSM4)[20230329更新]
  • [IE技巧] 如何关闭Windows Server版IE的安全限制
  • [LeetCode]剑指 Offer 40. 最小的k个数