Python 利用numpy高性能计算

来源:互联网 发布:spss预测后显示数据 编辑:程序博客网 时间:2024/05/21 19:28

Python 利用numpy高性能计算

numpy安装

使用anaconda或者intel的高性能python distribution安装。默认numpy已经链接mkl。

多线程线程数设置

export OMP_NUM_THREADS=N
N对应物理核心数为佳,如果代码写的不够好可以酌情加到超线程后逻辑核心数。
如:i7 6800K,6核12线程。纯高性能计算N设置为6,如果操作的不是连续内存可以最大设置到12。

编程注意事项

使用库函数

# normimport numpy as npnorm_val = np.norm(a)

使用库函数远比手写表达式简单快速,特别是链接了BLAS后性能超过C手写循环甚至分治法。因为BLAS库往往能够很好地根据矩阵选择合适的算法,加入SIMD,Cache优化等tricks。

Mask

例如:

a = np.random.rand(10,20,30) #10x20x30 matrixprint(a[a>0.5])

这样远比用循环速度快。

map In NumPy

目标函数:

f(x)={xx2x<0.50.5x

import numpy as npx = np.random.rand(2000)np.vectorize(lambda x:x if x<0.5 else x** 2.0)(x)#1000 loops, best of 3: 188 µs per loopf = lambda x: x if x<0.5 else x ** 2.0np.fromiter((f(xi) for xi in x),x.dtype,count=len(x))#1000 loops, best of 3: 237 µs per loopnp.where(x<5,x,x**2.0)# 100000 loops, best of 3: 3.9 µs per loopnp.array(map(f,x))# 1000000 loops, best of 3: 1.32 µs per loopnp.array([f(xi) for xi in x])# 1000 loops, best of 3: 238 µs per loop