python numba_python numba讲解

python numba_python numba讲解由于 python 有动态解释性语言的特性 跑起代码来相比 java c 要慢很多 尤其在做科学计算的时候 十亿百亿级别的运算 让 python 的这种劣势更加凸显 因此就出现了解决 python 慢的一大利器 numba 可以让 python 的运行速度提升上百倍甚至更多 numpy 是为面向 numpy 数组的计算任务而设计的 Numba 把 NumPy 数组类型生成高效的编译代码 用于在 GPU 或多核 CPU 上执行 在做大量

由于python有动态解释性语言的特性,跑起代码来相比java、c++要慢很多,尤其在做科学计算的时候,十亿百亿级别的运算,让python的这种劣势更加凸显。

因此就出现了解决python慢的一大利器numba,可以让python的运行速度提升上百倍甚至更多!

numpy是为面向numpy数组的计算任务而设计的。

Numba把NumPy数组类型生成高效的编译代码,用于在GPU或多核CPU上执行。

在做大量科学计算时和使用for循环数据较多时,尽量使用numba。

一:什么是numba

numba是一款可以将python函数编译为机器代码的JIT编译器,经过numba编译的python代码(仅限数组运算),其运行速度可以接近C或FORTRAN语言。

numba的作用是给python换一种编译器。让代码直接转成机器码运行。

二:如何使用numba

使用numba非常简单,只需要将numba装饰器应用到python函数中,无需改动原本的python代码,numba会自动完成剩余的工作。那么怎么使用呢,下面有一个例子。

1.计算numpy数组各个数值的双曲正切值。

(1)导入numpy、numba及其编译器

import numpy as np

import numba

from numba import jit

(2)传入numba装饰器jit,编写函数

# nopython = True 选项要求完全编译该函数(以便完全删除Python解释器调用),否则会引发异常

@jit(nopython=True) # jit,numba装饰器中的一种

def go_fast2(a): # 首次调用时,函数被编译为机器代码

trace = 0

# 假设输入变量是numpy数组

for i in range(a.shape[0]): # Numba 擅长处理循环

trace += np.tanh(a[i, i]) # numba喜欢numpy函数

return a + trace# numba喜欢numpy广播

(3)给函数传递实参

# 因为函数要求传入的参数是nunpy数组

x = np.arange(100).reshape(10, 10)

# 执行函数

go_fast(x)

(4)经numba加速的函数执行时间

% timeit go_fast(x)

(5)结果输出

3.63 µs ± 156 ns #加速后

136 µs ± 1.09 µs #不加速

快了40倍。

2.nunba对for循环的加速

(1)代码

# 普通函数

def go_fast1(): # 首次调用时,函数被编译为机器代码

x = 0

for i in np.arange(5000):

x += i

return x

# nopython = True选项要求完全编译该函数(以便完全删除Python解释器调用),否则会引发异常

@jit(nopython=True) # jit,numba装饰器中的一种

def go_fast2(): # 首次调用时,函数被编译为机器代码

x = 0

for i in np.arange(5000):

x += i

return x

(2)结果输出

1.57 µs ± 53.8 ns #加速后

408 µs ± 9.73 µs #不加速

快了200倍。

numba对python代码运行速度有巨大的提升,这极大的促进了大数据时代的python数据分析能力,但不会对numpy和for循环以外的python代码有很大帮助,对数据科学工作者来说,这真是一个好技术!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219726.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午10:02
下一篇 2026年3月17日 下午10:02


相关推荐

  • 选择法排序

    选择法排序ProblemB 选择法排序 TimeLimit 1Sec nbsp nbsp MemoryLimit 128MBSubmit 805 nbsp nbsp Solved 435 Submit Status WebBoard Description 用选择法对 10 个整数从小到大排序 Input10 个整数 Output 排序好的 10 个整数 Sampl

    2026年3月16日
    1
  • OpenClaw Docker 部署完全指南

    OpenClaw Docker 部署完全指南

    2026年3月15日
    2
  • ntp校时服务器(NTP校时器)介绍

    ntp校时服务器(NTP校时器)介绍酷鲨科技作为一家时间同步领域科研公司 今天简单介绍一下 ntp 校时服务器 其实大部分人认为 ntp 校时服务器是不同于 NTP 网络时间同步服务器 其实不然 基本是同一种产品 只是叫法不同 ntp 校时服务器页可以称为 NTP 校时器 ntp 校时服务器主要作用 ntp 校时服务器主要还是帮助不同网络设备之间进行时间同步 然而 同步 概念在通信领域中频率的同步 或者网络中每个节点的时钟频率与相位的同步 并且在规定的标准误差之间 其实网站时间的同步并没有解决 ntp 校时服务器的功能也就是让网络中的每一个时钟节点 频率 每一个具

    2026年3月16日
    2
  • 串口数据读取和动态显示Tkinter+matplotlib+pyqtgraph(详细教程)

    串口数据读取和动态显示Tkinter+matplotlib+pyqtgraph(详细教程)

    2020年11月8日
    220
  • 浏览器缓存的位置

    浏览器缓存的位置缓存位置的类型缓存位置有四种 各自有优先级 当依次查找缓存且都没有命中的时候 才会去请求网络 ServiceWorke 是运行在浏览器背后的独立线程 一般可以用来实现缓存功能 基于 h5 的 webworker 所以绝对不会阻碍当前 js 线程的执行 最重要的工作原理就是 后台线程 独立于当前网页线程 网络代理 在网页发起请求时代理 来缓存文件 使用 ServiceW

    2026年3月26日
    2
  • 我最终选择VS Code….

    我最终选择VS Code….Python 是全球最流行的编程语言之一 由于非常容易学习 因此 很多人开始用 Python 进行编程 包括我自己 Python 对初学者很友好 有相对简单的语法 有很多库和框架的社区支持 而且用途非常广泛 然而 初学者往往要问自己应该使用什么集成开发环境 IDE 或编辑器 我也面临这个挑战 虽然有几个 IDE 和代码编辑器可用于 Python 但多年来 PyCharm 和 VSCode 仍然是 Python 开发者的最爱 PyCharm 和 VSCode 都是编写 Python 代码的优秀工具 然而 至关重要的是 PyCha

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号