概述
最近在做python加速的事,numba的加速比较可观。
使用场景
Numba 简单到只需要在函数上加一个装饰器就能加速程序,但也有缺点。目前 Numba 只支持了 Python 原生函数和部分 NumPy 函数,
其他一些场景可能不适用。比如 Numba 官方给出这样的例子:
pandas 是更高层次的封装, Numba 其实不能理解它里面做了什么,所以无法对其加速。一些大家经常用的机器学习框架,如 scikit-learn , tensorflow , pytorch 等,已经做了大量的优化,不适合再使用 Numba 做加速。
此外,Numba 还不支持:
try … except 异常处理;
with 语句;
yield from 语句。
此外,Numba 还不支持:
try … except 异常处理;
with 语句;
yield from 语句。
那么 Numba 当前支持的功能有哪些呢?
详情请移步:http://numba.pydata.org/numba-doc/latest/reference/pysupported.html
你可以使用装饰器,@jit(nopython=True)
装饰器在这里是将其他函数作为参数,然后返回其他函数,目的是为了扩展其功能。
测试代码1
hello_numba.py
import numpy as np
import time
from numba import jit, njit
import random
#numba官方给的示例函数
def monte_carlo_pi(nsamples):
acc = 0
for i in range(nsamples):
x = random.random()
y = random.random()
if(x**2 + y**2) < 1.0:
acc += 1
return 4.0 * acc / nsamples
if __name__ == "__main__":
t1 = time.process_time()
monte_carlo_pi(1000000)
print("time1:%f" % (time.process_time() - t1))
#定义一个新的函数
monte_carlo_pi_jit = jit(