Python中Numpy和Math常用函数性能对比

 

numpy是如今数据分析领域离不开的Python第三方工具库,它和Python自带的math库中都有一些基础的数学函数,比如指数、对数、三角函数等。在需要使用这些函数的时候,到底该用numpy还是math,这个问题确实困扰了很多人。实现同样的功能,不同库中的函数,当然是要选择性能好的。

 

Python中Numpy和Math常用函数性能对比


对于numpy和math的常见几个函数,我们用代码简单测试了一下性能,代码和结果如下:

(测试用Python版本为3.8.3,numpy版本为1.18.3)

 

1. log函数测试

N = 200000

f = 1.5

t0 = time.time()

for a in range(1, N):

    np.log(a)

    np.log(f)

t1 = time.time()

for a in range(1, N):

    math.log(a)

    math.log(f)

t2 = time.time()

print("Numpy log time: ", t1 - t0)

print("math log time: ", t2 - t1)

测试结果:

Numpy log time:  0.32114124298095703 

math log time:  0.05388379096984863

经过200000次的重复计算,我们发现math库中的log函数所需时间是numpy的1/6左右,也就是说math在单数值计算的性能大概是numpy的6倍。

 

2. 三角函数测试

以cos作为测试案例:

f = 1.5

t0 = time.time()

for a in range(1, N):

    np.cos(a)

    np.cos(f)

t1 = time.time()

for a in range(1, N):

    math.cos(a)

    math.cos(f)

t2 = time.time()

print("\nNumpy cos time: ", t1 - t0)

print("math cos time: ", t2 - t1)

测试结果:

Numpy cos time:  0.29618000984191895 

math cos time:  0.051862239837646484

依然是200000次的重复计算,math的性能是numpy的5.71倍。

 

3. exp函数测试

f = 1.5

d=5

t0 = time.time()

for a in range(1, N):

    np.exp(d)

    np.exp(f)

t1 = time.time()

for a in range(1, N):

    math.exp(d)

    math.exp(f)

t2 = time.time()

print("\nNumpy exp time: ", t1 - t0)

print("math exp time: ", t2 - t1)

测试结果:

 

Numpy exp time:  0.2932150363922119 

math exp time:  0.048870086669921875

math的性能依然是numpy的6倍。

 

4. 平方根sqrt测试

f = 1.5

d=5

t0 = time.time()

for a in range(1, N):

    np.sqrt(a)

    np.sqrt(f)

t1 = time.time()

for a in range(1, N):

    math.sqrt(a)

    math.sqrt(f)

t2 = time.time()

print("\nNumpy sqrt time: ", t1 - t0)

print("math sqrt time: ", t2 - t1)

测试结果:

Numpy sqrt time:  0.30121898651123047 

math sqrt time:  0.04785966873168945

math的性能大约是numpy的6.3倍。

 

对几个典型函数的测试可以看出,math的性能要明显优于numpy同等函数的功能。因此,对于单数值的计算在选择库函数的时候,应当优先选择Python自带的math库中的函数。

 

 

Python中Numpy和Math常用函数性能对比