python加速器numba使用详解

目录
  • 1、最简单的使用
  • 2、进阶
  • 补充

python的一个加速器包,这里不讲原理,只讲应用过程,以及给出几个小例子,直接写就行了; 另外还给出了numba如何定义使用List

1、最简单的使用

当输出返回值为整数或浮点数时:

from numba import jit
@jit(nopython=True)
def f(x, y):
    return x+y

if __name__ == '__main__':
    a = 1
    b = 1
    print(f(a,b))

解释:

使用装饰器,另外,nopython=True是防止numba自动更改加速模式,也就是使用nopython。

上述代码等价于:

from numba import njit
@njit  # 也就是jit(nopython=True)
def f(x, y):
    return x+y

if __name__ == '__main__':
    a = 1
    b = 1
    print(f(a,b))

2、进阶

当输出返回值为“不同类型值”时:

装饰器使用:generated_jit

from numba import generated_jit, typed

@generated_jit(nopython=True)
def f2(x):
    if x==1:
        return lambda x: x+1
    else:
        return lambda x: [1,2]

if __name__ == '__main__':
    a = 1
    print(f2(a))

当进行矩阵或向量运算时:

使用装饰器:vectorize

from numba import vectorize, float64
import numpy as np

@vectorize([float64(float64, float64)])  # 注意有中括号
def f(x, y):
    return x + y

if __name__ == '__main__':
    a = np.array([1,2])
    b = np.array([2,2])
    print(f(a,b))

补充

在numba内定义列表:

import numpy as np
import time
NUM = 160
from numba import jit
from numba.typed import List

a = List()
a.append(1) # 同样需要指定数据类型,塞个1,数据类型就是int

@jit(nopython=True)
def f(a):
    for i in range(NUM):
        a.append(i)

if __name__ == '__main__':
   for i in range(5):
    start = time.time()
    f(a)
    print(time.time()-start)

到此这篇关于python加速器numba使用详解的文章就介绍到这了,更多相关python加速器numba内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用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__ 见我的博文: 浅谈解除装饰

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

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

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

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

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

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

  • Python 提速器numba

    目录 1.为什么 python 这么慢 动态变量 解释性语言 2.numba 加速 python 的小例子 4.numba 使用 CUDA 加速 5.For 循环写法的影响 在循环前预先计算好所有的 vec Python python 真的太好用了,但是它真的好慢啊(哭死) ; C++ 很快,但是真的好难写啊,此生能不碰它就不碰它.老天啊,有没有什么两全其美的办法呢?俗话说的好:办法总是比困难多,大家都有这个问题,自然也就有大佬来试着解决这个问题,这就请出我们今天的主角: numba 不过在介绍

  • 基于Numba提高python运行效率过程解析

    Numba是Python的即时编译器,在使用NumPy数组和函数以及循环的代码上效果最佳.使用Numba的最常见方法是通过其装饰器集合,这些装饰器可应用于您的函数以指示Numba对其进行编译.调用Numba装饰函数时,它会被"即时"编译为机器代码以执行,并且您的全部或部分代码随后可以本机机器速度运行! 安装numba(我在这里加了--default-timeout=10000,防止安装时出现timeout的错误) pip --default-timeout=10000 install

  • python加速器numba使用详解

    目录 1.最简单的使用 2.进阶 补充 python的一个加速器包,这里不讲原理,只讲应用过程,以及给出几个小例子,直接写就行了; 另外还给出了numba如何定义使用List 1.最简单的使用 当输出返回值为整数或浮点数时: from numba import jit @jit(nopython=True) def f(x, y):     return x+y if __name__ == '__main__':     a = 1     b = 1     print(f(a,b)) 解释

  • MySQL数据库设计之利用Python操作Schema方法详解

    弓在箭要射出之前,低声对箭说道,"你的自由是我的".Schema如箭,弓似Python,选择Python,是Schema最大的自由.而自由应是一个能使自己变得更好的机会. Schema是什么? 不管我们做什么应用,只要和用户输入打交道,就有一个原则--永远不要相信用户的输入数据.意味着我们要对用户输入进行严格的验证,web开发时一般输入数据都以JSON形式发送到后端API,API要对输入数据做验证.一般我都是加很多判断,各种if,导致代码很丑陋,能不能有一种方式比较优雅的验证用户数据呢

  • Python之str操作方法(详解)

    1. str.format():使用"{}"占位符格式化字符串(占位符中的索引号形式和键值对形式可以混合使用). >>> string = 'python{}, django{}, tornado{}'.format(2.7, 'web', 'tornado') # 有多少个{}占位符就有多少个值与其对应,按照顺序"填"进字符串中 >>> string 'python2.7, djangoweb, tornadotornado'

  • 基于python时间处理方法(详解)

    在处理数据和进行机器学习的时候,遇到了大量需要处理的时间序列.比如说:数据库读取的str和time的转化,还有time的差值计算.总结一下python的时间处理方面的内容. 一.字符串和时间序列的转化 time.strptime():字符串=>时间序列 time.strftime():时间序列=>字符串 import time start = "2017-01-01" end = "2017-8-12" startTime = time.strptime

  • Python探索之SocketServer详解

    SocketServer,网络通信服务器,是Python标准库中的一个模块,其作用是创建网络服务器.SocketServer模块定义了一些类来处理诸如TCP.UDP.UNIX流和UNIX数据报之上的同步网络请求. SocketServer模块处理网络请求的功能,可以通过两个主要的类来实现:一个是服务器类,一个是请求处理类. 服务器类 处理通信问题,如监听一个套接字并接收连接等: 请求处理类 处理"协议"问题,如解释到来的数据.处理数据并把数据发回给客户端等. 这种实现将服务器的实现过程

  • python学习 流程控制语句详解

    ###################### 分支语句 python3.5 ################ #代码的缩进格式很重要 建议4个空格来控制 #根据逻辑值(True,Flase)判断程序的运行方向 # Ture:表示非空的量(String,tuple元组 .list.set.dictonary),所有非零的数字 # False:0,None .空的量 #逻辑表达式 可以包含 逻辑运算符 and or not if: ##################################

  • Python 调用Java实例详解

    Python 调用Java实例详解 前言: Python 对服务器端编程不如Java 所以这方面可能要调用Java代码 前提: Linux 环境  1 安装 jpype1 安装后测试代码: from jpype import * startJVM(getDefaultJVMPath(), "-ea") java.lang.System.out.println("Hello World") shutdownJVM() 2 调用非jdk的jar包, test.jar 包

  • python 编程之twisted详解及简单实例

    python 编程之twisted详解 前言: 我不擅长写socket代码.一是用c写起来比较麻烦,二是自己平时也没有这方面的需求.等到自己真正想了解的时候,才发现自己在这方面确实有需要改进的地方.最近由于项目的原因需要写一些Python代码,才发现在python下面开发socket是一件多么爽的事情. 对于大多数socket来说,用户其实只要关注三个事件就可以了.这分别是创建.删除.和收发数据.python中的twisted库正好可以帮助我们完成这么一个目标,实用起来也不麻烦.下面的代码来自t

  • Python 文件操作的详解及实例

    Python 文件操作的详解及实例 一.文件操作 1.对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下: 昨夜寒蛩不住鸣. 惊回千里梦,已三更. 起来独自绕阶行. 人悄悄,帘外月胧明. 白首为功名,旧山松竹老,阻归程. 欲将心事付瑶琴. 知音少,弦断有谁听. f = open('小重山') #打开文件 data=f.read()#获取文件内容 f.close() #关闭文件 注意:if in the win,hello文件是utf8保存的,打

  • Python的语言类型(详解)

    Python 是强类型的动态脚本语言 . 强类型:不允许不同类型相加 动态:不使用显示数据类型声明,且确定一个变量的类型是在第一次给它赋值的时候 脚本语言:一般也是解释型语言,运行代码只需要一个解释器,不需要编译 强类型语言和弱类型语言 1.强类型语言:使之强制数据类型定义的语言.没有强制类型转化前,不允许两种不同类型的变量相互操作.强类型定义语言是类型安全的语言,如Java.C# 和 python,比如Java中"int i = 0.0;"是无法通过编译的: 2.弱类型语言:数据类型

随机推荐