python加速之numpy与numba

2023-11-10

最近在看深度学习加速计算时,发现了numba加速库,声称能加速python运行速速度高达百倍

首先是测速的工具

常规的测速工具是time.time(),但是在internet上看到有人说,这个不准确,python有个强大的代码测速库:timeit,于是就斗胆用这个试试。
然后就开始造一个例子:那就求一个二维数组的和吧!
首先用python原生的列表:

def go_pylist():
    a = list(range(100))
    b = list(range(100))
    c = []
    for i in range(len(a)):
        a[i] = i ** 2
        b[i] = i ** 3
        c.append(a[i] + b[i])
    return c

然后定义numpy:

def go_numpy():
    x = np.arange(100)
    y = np.arange(100)
    z = x**2 + y**3
    return z

最后numba,语法倒挺简单,用jit装饰器就可以了:

@jit(nopython=True) # jit,numba装饰器中的一种
def go_numba(): # 首次调用时,函数被编译为机器代码
    x = np.arange(100)
    y = np.arange(100)
    z = x**2 + y**3
    return z

利用timeit计算耗时结果(每个函数跑他个100遍):

timeit的number参数:表示当前测速的程序运行几遍
print('python List:', timeit('go_pylist()', 'from __main__ import go_pylist', number=100))
print('python numpy:', timeit('go_numpy()', 'from __main__ import go_numpy', number=100))
print('python numba + numpy 首次编译:', timeit('go_numba()', 'from __main__ import go_numba', number=100))
print('python numba + numpy 再次运行:', timeit('go_numba()', 'from __main__ import go_numba', number=100))

迫不及待看结果喽:

python List: 0.005218099999183323
python numpy: 0.0003794999975070823
python numba + numpy 首次编译: 0.8580956000005244
python numba + numpy 再次运行: 0.00011240000094403513

差别不大,我再跑1000遍:

python List: 0.05830569999670843
python numpy: 0.00400420000005397
python numba + numpy 首次编译: 0.975803299999825
python numba + numpy 再次运行: 0.0008096999990812037

一给我里giao giao:

numpy提速已经很离谱啦!!!但是numba好像没那么叼哎!
第一次运行numba,耗时尽然普遍超过python原生列表和numpy,我叹为观止!
再次运行就遥遥领先。numba运行两次才能提速,那两次加起来不是更耗时么??谁能给我解答一下?

PS:忽略产生数据的速度差异了,而且,我好像混淆了计算加速和运行代码加速,不过没啥影响,numba和numpy对比就可以了!

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

python加速之numpy与numba 的相关文章

随机推荐

  • CSS开发技巧(四):解决flex多行布局的行间距异常、子元素高度拉伸问题

    在使用flex布局时 若出现换行 有两种较为特殊的现象是值得我们研究的 子元素高度被拉伸 其实际高度大于它的内容高度 各行子元素之间的行间距过大 甚至我们根本没有给子元素设置margin 现在我们将要探究引发这两种现象的原因及解决方案 一
  • for循环三种跳出循环的方法(retrun、continue、break)Mark

    1 continue 指的是跳出当前循环 即不执行continue后的语句 直接进入下次循环 continue语句和break语句差不多 不同的是 它不是退出一个循环 而是跳出当前循环 进行下一轮循环 public static void
  • mac 下的 bash gradle command not found

    最近在用android studio 使用命令行打包的时候出现 bash gradle command not found这个问题 其实也就是因为自己唑gradle的环境变量给弄丢了 但是由于来自大山的孩子对于mac不是很熟 所以不知道咋去
  • Redis3.0.7 cluster/集群 安装配置教程

    原文地址 http blog csdn net ouchuquan article details 50884479 参考地址 http doc redisfans com topic cluster tutorial html http
  • ios 轻 App

    整体建议 使用在一些展示项目中 少量数据产生的 需要借助apple平台让用户了解到的 另外 该功能也可以作为品牌宣传 特别是一些景点之类 简单 页面的 轻 App 是 app 的一小部分 因此您可以使用 iOS SDK 在与完整 app 相
  • Rational rose 2007 下载和安装教程

    文章目录 Rational rose 简介 一 下载Rational rose 2007 二 安装Rational rose 2007 三 激活Rational Rose 2007 四 启动Rational Rose 2007 Ration
  • C++多态性

    本文参考浅谈C 多态性 多态性可以简单地概括为 一个接口 多种方法 程序在运行时才决定调用的函数 它是面向对象编程领域的核心概念 多态 polymorphism 字面意思多种形状 C 多态性是通过虚函数来实现的 虚函数允许子类重新定义成员函
  • 11.16---遍历数组赋值给对象失败,const定义常量不能重新再赋值,render的参数

    1 遍历数组赋值给对象失败 取到的都是最后一项的值 let result item list forEach function value item a value a item b value b result pust item 结果得
  • 字符串合并并处理(C++实现)

    按照指定规则对输入的字符串进行处理 详细描述 将输入的两个字符串合并 对合并后的字符串进行排序 要求为 下标为奇数的字符和下标为偶数的字符分别从小到大排序 这里的下标意思是字符在字符串中的位置 对排序后的字符串进行操作 如果字符为 0 9
  • 关于结构体中最后的 char [0]

    问题 结构体中最后定义一个类似 char p 0 这样的成员 有何意义 回复1 这是个广泛使用的常见技巧 常用来构成缓冲区 比起指针 用空数组有这样的优势 1 不需要初始化 数组名直接就是所在的偏移 2 不占任何空间 指针需要占用int长度
  • vue中实现div可编辑,并插入指定元素,样式

    前言 vue中实现一个既可以编辑内容 有可以动态编辑内容插入一个带有样式的内容 改变默认内容后 这个样式消失的效果 这里来整理下调研与解决实现问题之路 实现最终效果 图2为默认内容 1 可以光标点击任意地方 然后点击按钮 插入带有span的
  • 删除流氓软件的方法

    电脑在网上下载一些东西时经常被捆绑下载很多流氓软件 导致电脑是不是跳出一些弹窗广告 烦不胜烦 经过努力奋斗终于把流氓软件都删除了 下面介绍几个删除流氓软件的经验 1 如果软件不是安装在C盘 可以使用bitloacker给D盘加密 这样开机就
  • CAS单点登录-自定义认证登录策略(五)

    在上一节中我们使用了CAS的提供的JDBC 方式的登录认证 基本上能够满足我们多种需求的认证 但是如果CAS框架提供的方案还是不能满足我们的需要 比如我们不仅需要用户名和密码 还要验证其他信息 比如邮箱 手机号 但是邮箱 手机信息在另一个数
  • 毕业设计 - 基于stm32的WiFi监控小车

    文章目录 1 背景 2 系统设计方案 2 1 实现功能 2 1 1 硬件部分 2 1 2 软件部分 2 1 3 WIFI通信功能 2 2 系统架构 2 2 1 WiFi 通信 2 2 2 电机驱动 2 2 3 摄像头 2 2 4 舵机 2
  • 淘宝商品详情

    contact link 待签名参数 uid ttid 231200 taobao android 9 16 0 data 7B 22itemNumId 22 3A 22638728868726 22 7D lng 23 366706 ut
  • 【报错记录】解决CentOS免密失败的问题,以及解决免密问题的排查流程

    前言 本文相当于对之前的文章进行的补充 原创 三台CentOS7非root用户间实现相互间的免密登录 DCTANT的博客 CSDN博客 现场遇到一台旧服务器与其他服务器免密失败的问题 明明 ssh目录中authorized keys中的公钥
  • 图片等比例缩放,javademo

    图片等比缩小 放大需要将图片适配到现有的目标中 思想就是 下面代码 int w Integer parseInt width 原始宽 int h Integer parseInt height 原始高 int w1 450 固定宽 int
  • Ubuntu下如何创建文本文件

    找到要创建文件的位置 右键单机打开终端 输入sudo gedit 文件名字 就可以创建成功啦
  • STM32 USART—串口通信

    目录 一 串口通信协议物理层电平标准 1 RS232标准 2 USB转串口通讯 常用 3 原生的串口到串口 二 串口通信协议软件层 三 串口功能框图 1 引脚 2 数据寄存器USART DR 3 字符帧组成介绍 4 发送与接收数据 5 串口
  • python加速之numpy与numba

    最近在看深度学习加速计算时 发现了numba加速库 声称能加速python运行速速度高达百倍 首先是测速的工具 常规的测速工具是time time 但是在internet上看到有人说 这个不准确 python有个强大的代码测速库 timei