众所周知,Python和Java一样是基于虚拟机的语言,并不是像C/C++那样将程序代码编译成机器语言再运行,而是解释一行执行一行,速度比较慢。使用Numba库的JIT技术编译以后,可以明显提高程序的运行速度。

首先,使用PyCharm安装Numba库,在Project Interpreter界面可以安装。

程序代码:

import numpy as np
from numba import jit
import time @jit
def sum_jit(arr):
s_time = time.time()
m = arr.shape[0]
result = 0.0
for i in range(m):
result += arr[i]
e_time = time.time()
return (e_time-s_time) def sum(arr):
s_time = time.time()
m = arr.shape[0]
result = 0.0
for i in range(m):
result += arr[i]
e_time = time.time()
return (e_time-s_time) def main():
n = int(10.0*1e6)
array = np.random.random(n)
t1 = sum_jit(array)
t2 = sum(array)
print("Time with JIT:", t1)
print("Time without JIT:", t2) if __name__ == '__main__':
main()

上面代码的sum()和sum_jit()两个函数完全相同,区别在于sum_jit()添加了@jit注解,表面该函数使用Numba JIT进行编译以后再运行,而sum()是不编译的运行。对main()中n的值取1×106~10×106,计算每个值两个函数运行的时间,单位为Second,如下图所示:

可以看到随着运算量的线性增加,sum()的运行时间几乎也是线性增加的,而sum_jit()的运行时间基本上保持不变,运算量的增加并没有带来影响。

Numba加速Python程序的更多相关文章

  1. 使用numba加速python程序

    前面说过使用Cython来加速python程序的运行速度,但是相对来说程序改动较大,这次就说一种简单的方式来加速python计算速度的方法,就是使用numba库来进行,numba库可以使用JIT技术即 ...

  2. 用Cython加速Python程序以及包装C程序简单测试

    用Cython加速Python程序 我没有拼错,就是Cython,C+Python=Cython! 我们来看看Cython的威力,先运行下边的程序: import time def fib(n): i ...

  3. 用 Numba 加速 Python 代码

    原文出自微信公众号:Python那些事 一.介绍 pip install numba Numba 是 python 的即时(Just-in-time)编译器,即当你调用 python 函数时,你的全部 ...

  4. numba jit加速python程序

    numba numba加速循环.numpy的一些运算,大概是将python和numpy的一些代码转化为机器代码,速度飞快! 加速耗时很长的循环时: from numba import jit # 在函 ...

  5. 使用numba加速python科学计算

    技术背景 python作为一门编程语言,有非常大的生态优势,但是其执行效率一直被人诟病.纯粹的python代码跑起来速度会非常的缓慢,因此很多对性能要求比较高的python库,需要用C++或者Fort ...

  6. python程序的pypy加速

    我们知道,python作为一种几乎是脚本语言的语言,其优点固然有,但是其有一个最大的缺点,就是运行速度没有办法和c,c++,java比.最近在些一些代码的时候也是碰到了这样的问题. 具体而言,pyth ...

  7. 贡献python prim多源最短路搜索算法 numba加速方法的demo和总结

    1.测试两个算法 #coding:utf-8 import time import numba import numpy as np ''' 使用numba加速总结, (1).在数值计算比如int f ...

  8. 5款Python程序员高频使用开发工具推荐

    很多Python学习者想必都会有如下感悟:最开始学习Python的时候,因为没有去探索好用的工具,吃了很多苦头.后来工作中深刻体会到,合理使用开发的工具的便利和高效.今天,我就把Python程序员使用 ...

  9. 构建可扩展的GPU加速应用程序(NVIDIA HPC)

    构建可扩展的GPU加速应用程序(NVIDIA HPC) 研究人员.科学家和开发人员正在通过加速NVIDIA GPU上的高性能计算(HPC)应用来推进科学发展,NVIDIA GPU具有处理当今最具挑战性 ...

随机推荐

  1. 011 SpringSecurity的基本原理

    一:securuty默认情况 1.默认的配置 在引用security依赖以后,会有一个配置 security.basic.enabled=true 2.启动 用户名:user 密码:在控制台上查看 3 ...

  2. IDEA创建Web项目(maven)

    第一步:创建项目 第二步:使用maven创建,并选择jdk 第三步:修改项目名称 第四步:选择自动导入依赖(很重要!!) 第五步:添加核心依赖和打包 第六步:编译一下 第七步:配置web容器(这里是用 ...

  3. Python中元类

    元类(metaclass) 简单地说,元类就是一个能创建类的类,而类class 是由type创建的,class可以创建对象 type与object的关系详见:python中type和object 1. ...

  4. Validation failed for object='employee'. Error count: 1问题解决

    2018-11-13 在表单提交时有时候会提示 Validation failed for object=’user’. Error count: 1,其中user是表的名字,Error count是 ...

  5. python2.7安装和uwsgi

    python2.7安装和uwsgi tar zxf Python-2.7.13xxxx# 这里,必须用–enable-shared,生成动态库,否则会遇到wsgi不能编译的问题. Bonus: mul ...

  6. hdu1202解题报告

    #include<stdio.h>int main(){    int n,i;    double sum,s,p,sum1;    while(scanf("%d" ...

  7. Dev-C++安装第三方库boost

    Dev-C++安装第三方库boost  转 https://www.jianshu.com/p/111571e4d6f5?utm_source=oschina-app 之前鉴于codeblocks界面 ...

  8. kafka告警简单方案

    一.前言 为什么要设计kafka告警方案?现成的监控项目百度一下一大堆,KafkaOffsetMonitor.KafkaManager. Burrow等,具体参考:kafka的消息挤压监控.由于本小组 ...

  9. Git rebase命令实战

    一.前言 一句话,git rebase 可以帮助项目中的提交历史干净整洁!!! 二.避免合并出现分叉现象 git merge操作 1.新建一个 develop 分支   2.在develop分支上新建 ...

  10. WordPress Social Warfare组件 远程代码漏洞执行详细复现

    0x00前言 今天在知道创宇上发现3月26日提交WordPress XSS和远程代码执行漏洞,于是试着复现了下远程代码执行漏洞 该漏洞源于Social Warfare组件,并且版本<=3.5.2 ...