使用numba对Python运算加速的方法

有时候需要比较大的计算量,这个时候Python的效率就很让人捉急了,此时可以考虑使用numba 进行加速,效果提升明显~

(numba 安装貌似很是繁琐,建议安装Anaconda,里面自带安装好各种常用科学计算库)

from numba import jit

@jit
def t(count=1000):
 total = 0
 for i in range(int(count)):
  total += i
 return total

测试效果:

(关于__wrapped__ 见我的博文: 浅谈解除装饰器作用(python3新增) )

In [17]: %timeit -n 1 t.__wrapped__()
1 loop, best of 3: 52.9 µs per loop

In [18]: %timeit -n 1 t()
The slowest run took 13.00 times longer than the fastest. This could mean that an intermediate result is being cached.
1 loop, best of 3: 395 ns per loop

可以看到使用jit 加速后,即使设置测试一次,实际上还是取了三次的最优值,如果取最坏值(因为最优值可能是缓存下来的),则耗时为395ns * 13 大概是5us 还是比不使用的52.9us 快上大概10倍,

增大计算量可以看到使用numba加速后的效果提升更加明显,

In [19]: %timeit -n 10 t.__wrapped__(1e6)
10 loops, best of 3: 76.2 ms per loop

In [20]: %timeit -n 1 t(1e6)
The slowest run took 8.00 times longer than the fastest. This could mean that an intermediate result is being cached.
1 loop, best of 3: 790 ns per loop

如果减少计算量,可以看到当降到明显小值时,使用加速后的效果(以最差计)与不加速效果差距不大,因此如果涉及到较大计算量不妨使用jit 加速下,何况使用起来这么简便。

%timeit -n 1 t(10)
1 loop, best of 3: 0 ns per loop

%timeit -n 100 t.__wrapped__(10)
100 loops, best of 3: 1.79 µs per loop

%timeit -n 1 t(1)
The slowest run took 17.00 times longer than the fastest. This could mean that an intermediate result is being cached.
1 loop, best of 3: 395 ns per loop

%timeit -n 100 t.__wrapped__(1)
100 loops, best of 3: 671 ns per loop

以上这篇使用numba对Python运算加速的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 一行代码让 Python 的运行速度提高100倍

    python一直被病垢运行速度太慢,但是实际上python的执行效率并不慢,慢的是python用的解释器Cpython运行效率太差. "一行代码让python的运行速度提高100倍"这绝不是哗众取宠的论调. 我们来看一下这个最简单的例子,从1一直累加到1亿. 最原始的代码: import time def foo(x,y): tt = time.time() s = 0 for i in range(x,y): s += i print('Time used: {} sec'.form

  • 让Python代码更快运行的5种方法

    不论什么语言,我们都需要注意性能优化问题,提高执行效率.选择了脚本语言就要忍受其速度,这句话在某种程度上说明了Python作为脚本语言的不足之处,那就是执行效率和性能不够亮.尽管Python从未如C和Java一般快速,但是不少Python项目都处于开发语言领先位置. Python很简单易用,但大多数人使用Python都知道在处理密集型cpu工作时,它的数量级依然低于C.Java和JavaScript.但不少第三方不愿赘述Python的优点,而是决定自内而外提高其性能.如果你想让Python在同一

  • 使用numba对Python运算加速的方法

    有时候需要比较大的计算量,这个时候Python的效率就很让人捉急了,此时可以考虑使用numba 进行加速,效果提升明显~ (numba 安装貌似很是繁琐,建议安装Anaconda,里面自带安装好各种常用科学计算库) from numba import jit @jit def t(count=1000): total = 0 for i in range(int(count)): total += i return total 测试效果: (关于__wrapped__ 见我的博文: 浅谈解除装饰

  • Python复数属性和方法运算操作示例

    本文实例讲述了Python复数属性和方法运算操作.分享给大家供大家参考,具体如下: #coding=utf8 ''''' 复数是由一个实数和一个虚数组合构成,表示为:x+yj 一个负数时一对有序浮点数(x,y),其中x是实数部分,y是虚数部分. Python语言中有关负数的概念: 1.虚数不能单独存在,它们总是和一个值为0.0的实数部分一起构成一个复数 2.复数由实数部分和虚数部分构成 3.表示虚数的语法:real+imagej 4.实数部分和虚数部分都是浮点数 5.虚数部分必须有后缀j或J 复

  • 通过numba模块给Python代码提速的方法详解

    简介:numba是Anaconda公司开发的针对Python的开源JIT编译器,用于提供Python版CPU和GPU编程,速度比原生Python快数十倍.numba是第三方库,可以在运行时将Python代码编译为本地机器指令,而不会强制大幅度的改变普通的Python代码,使得在部分场景下执行Python的效率得到飞速的提升. 工作原理对比: Python文件执行过程 1..py文件通过解释器转化为虚拟机可以执行的字节码(.pyc):字节码在虚拟机上执行,得到结果. 2.字节码是一种只能运行在虚拟

  • numba提升python运行速度的实例方法

    大家都知道Python运行速度很慢,但是轮子多,因此用户十分广泛,在各种领域上都能用到Python,但是最头疼的还是,解决运行速度问题,因此这里给大家介绍的是numba,是基本是等于再造语言.但是支持的numpy函数并不多.要让能jit的函数多起来才行.下面就详细介绍使用numba提升python运行速度方法. numba简介: 能够实现将python函数编译为机器代码,提高运行速度. 工作作用: 给python换一种编译器 使用numba: 1.导入numba及其编译器 import nump

  • 利用numba让python速度提升百倍

    目录 一.什么是numba? 二.numba适合科学计算 三.学习使用numba 四.numba让python飞起来 前言; python由于它动态解释性语言的特性,跑起代码来相比java.c++要慢很多,尤其在做科学计算的时候,十亿百亿级别的运算,让python的这种劣势更加凸显. 办法永远比困难多,numba就是解决python慢的一大利器,可以让python的运行速度提升上百倍! 一.什么是numba? numba是一款可以将python函数编译为机器代码的JIT编译器,经过numba编译

  • Python 并行加速技巧分享

    目录 1 前言 2 使用joblib进行并行计算 2.1 使用Parallel与delayed进行并行加速 1 前言 我们在日常使用Python进行各种数据计算处理任务时,若想要获得明显的计算加速效果,最简单明了的方式就是想办法将默认运行在单个进程上的任务,扩展到使用多进程或多线程的方式执行. 而对于我们这些从事数据分析工作的人员而言,以最简单的方式实现等价的加速运算的效果尤为重要,从而避免将时间过多花费在编写程序上. 而今天我就来带大家学习如何利用joblib这个非常简单易用的库中的相关功能,

  • Python创建对称矩阵的方法示例【基于numpy模块】

    本文实例讲述了Python创建对称矩阵的方法.分享给大家供大家参考,具体如下: 对称(实对称)矩阵也即: step 1:创建一个方阵 >>> import numpy as np >>> X = np.random.rand(5**2).reshape(5, 5) >>> X array([[ 0.26984148, 0.25408384, 0.12428487, 0.0194565 , 0.91287708], [ 0.31837673, 0.354

  • Python素数检测的方法

    本文实例讲述了Python素数检测的方法.分享给大家供大家参考.具体如下: 因子检测: 检测因子,时间复杂度O(n^(1/2)) def is_prime(n): if n < 2: return False for i in xrange(2, int(n**0.5+1)): if n%i == 0: return False return True 费马小定理: 如果n是一个素数,a是小于n的任意正整数,那么a的n次方与a模n同余 实现方法: 选择一个底数(例如2),对于大整数p,如果2^(

  • Python延时操作实现方法示例

    本文实例讲述了Python延时操作实现方法.分享给大家供大家参考,具体如下: 在日常的开发中,往往会遇到这样的需求,需要某一个函数在一段时间之后才执行以达到某种特定的效果.此时,我们就需要某种机制,使一个函数延后执行.接下来简单介绍一下两种实现此类效果的方法: sched import sched,time def func(a): print time.time(),"Hello Sched!",a print time.time() s = sched.scheduler(time

  • 8种用Python实现线性回归的方法对比详解

    前言 说到如何用Python执行线性回归,大部分人会立刻想到用sklearn的linear_model,但事实是,Python至少有8种执行线性回归的方法,sklearn并不是最高效的. 今天,让我们来谈谈线性回归.没错,作为数据科学界元老级的模型,线性回归几乎是所有数据科学家的入门必修课.抛开涉及大量数统的模型分析和检验不说,你真的就能熟练应用线性回归了么?未必! 在这篇文章中,文摘菌将介绍8种用Python实现线性回归的方法.了解了这8种方法,就能够根据不同需求,灵活选取最为高效的方法实现线

随机推荐