操作系统:Ubuntu 16.04
Python版本:Python 3.5
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple numba
但是报错,终端部分输出为:
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting numba==0.30
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/14/51/27321311a455a7ba1431245e5ffa8084bea98b31b28034e56b3f47e9fe90/numba-0.30.0.tar.gz (1.2 MB)
|████████████████████████████████| 1.2 MB 347 kB/s
Collecting llvmlite
Using cached https://pypi.tuna.tsinghua.edu.cn/packages/50/cc/04526507e80d546be5688ce0246e40277b61e7949c3347c6609b6a4154cf/llvmlite-0.32.1.tar.gz (104 kB)
Successfully built numba
Failed to build llvmlite
可见numba
依赖llvm
,但是llvm
安装失败。
原因:
Python版本为3.5时,适配的llvmlite
版本为llvmlite-0.31.0-cp35-cp35m-manylinux1_x86_64.whl
,但是自动下载的是llvmlite-0.32.1
。
解决办法:
1.首先安装llvmlite-0.31
:
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple llvmlite==0.31
2.然后再安装numba
:
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple numba
Numba使Python代码速度更快。
Numba是一个开源的JIT编译器,它将Python和NumPy代码的子集转换成快速的机器代码。
Numba在运行时使用行业标准LLVM编译器库将Python函数转换为优化的机器代码。Numba用Python编译的数值算法可以接近C或FORTRAN的速度。
您不需要替换Python解释器,运行单独的编译步骤,甚至安装了C/C++编译器。只需对Python函数应用一个Numba修饰符,Numba就会完成其余的工作。
from numba import jit
import random
@jit(nopython=True)
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
Numba设计用于NumPy数组和函数。Numba为不同的数组数据类型和布局生成专门的代码,以优化性能。特殊的decorator可以创建在NumPy数组上广播的通用函数,就像NumPy函数一样。
Numba还可以与Jupyter笔记本进行交互计算,并与分布式执行框架(如Dask和Spark)配合使用。
@numba.jit(nopython=True, parallel=True)
def logistic_regression(Y, X, w, iterations):
for i in range(iterations):
w -= np.dot(((1.0 /
(1.0 + np.exp(-Y * np.dot(X, w)))
- 1.0) * Y), X)
return w
Numba提供了一系列的选项来并行化cpu和gpu的代码,通常只需要少量的代码更改。
发布高性能Python应用程序,而不必担心二进制编译和打包。源代码仍然是纯Python,而Numba在运行时处理编译。我们在200多种不同的平台配置中连续测试Numba。
Numba支持Intel和AMD x86、POWER8/9、ARM CPU、NVIDIA和AMD GPU、Python 2.7和3.4-3.7,以及Windows/macOS/Linux。大多数系统的预编译Numba二进制文件以conda包和pip可安装轮子的形式提供。