文章目录
- 介绍
- 核心装饰器与基础用法
-
- @jit(nopython=True):最常用的编译装饰器
- @njit的简写
-
- 编译时指定类型签名
- 并行加速(parallel=True)
- @cuda.jit: GPU 编程(CUDA)
- 向量化函数(@vectorize)
- 性能优化技巧
- 调试与常见问题
-
- 调试模式
- 常见错误
- 适用场景与局限性
-
- 实例:加速蒙特卡洛模拟
介绍
Numba 是一个专为 Python 设计的即时编译器(JIT),能够将部分 Python 代码转换为高效的机器码,显著提升数值计算密集型代码的执行速度。
核心装饰器与基础用法
@jit(nopython=True):最常用的编译装饰器
- nopython=True(推荐):完全不使用 Python 解释器,性能最优。若无法编译会报错。
- nopython=False(默认):退回到 Python 解释器执行,可能导致性能下降。
from numba import jit
@jit(nopython=True) # nopython=True:强制编译为纯机器码(不依赖Python解释器)
def sum_squares(n):
s = 0
for i in range(n):
s += i**2
return s
# 编译后的函数执行速度接近C语言
result = sum_squares(1000)
@njit的简写
@njit是@jit(nopython=True)的简写。
from numba import njit
@njit
def sum_squares(n):
# 与@jit(nopython=True)完全等价
pass
编译时指定类型签名
@jit('float64(int64)', nopython=True) # 指定输入输出类型,进一步优化
def sum_squares(n):
s = 0.0 # 确