python科学计算性能篇

数组函数计算

对于如下公式及大数组a,我们有两种方式高速计算。

方法一:Numpy向量化技术

import numpy as np
I = 500000
a_np = np.arange(I)
def f1(a):
    return (np.abs(np.cos(a)))**0.5+np.sin(2+3*a)
b = f4(a_np)
print(b[:5])


output:
[ 1.90929743 -0.22387169  1.63445269 -0.00500654  1.79908965]

方法二:使用numexpr多线程实现

import numexpr as ne
I = 500000
a_np = range(I)
def f2(a):
    ex = 'abs(cos(a))**0.5+sin(2+3*a)'
    ne.set_num_threads(16)
    return ne.evaluate(ex)
b = f2(a_np)
print(b[:5])

output:
[ 1.90929743 -0.22387169  1.63445269 -0.00500654  1.79908965]

延伸

数组的行优先布局性能更好,NumPy ndarray对象没有指定的时候默认使用这种内存布局。

你可能感兴趣的:(数据清洗)