Python性能优化(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32782059/article/details/74206421

Python是一种解释型的语言,本身的计算性能并不高。但是Python已经发展成为了一种访问高性能技术的理想平台,不同库的使用将大大影响运算的速度。

下面就各种计算库的计算速度做一个简单的测试:


一、math库的计算

from math import *
from time import ctime
import timeit

loops = 25000000
a = range( 1, loops)

def f( x):
return 3 * log(x) + cos(x) ** 2

def calc():
[f(x) for x in a]

print(ctime())
# calc共执行5次,花费90秒,平均每一次花费18秒的时间。
t = timeit.Timer( lambda: calc()).timeit( 5)
print(t)
print(ctime())
2500万次的计算需要花费18秒的时间(本人测试机器)


二、使用numpy库

import numpy as np
from time import ctime
import timeit

loops = 25000000
a = np.arange( 1, loops)

def calc():
#执行2500万次计算
3 * np.log(a) + np.cos(a) ** 2

print(ctime())
# calc共执行5次,花费6.5秒,平均每一次花费1.3秒的时间。
t = timeit.Timer( lambda: calc()).timeit( 5)
print(t)
print(ctime())
2500万次的计算需要花费1.5秒的时间(本人测试机器)


三、numexpr库的使用

import numexpr as ne
import numpy as np
from time import ctime
import timeit

loops = 25000000
a = np.arange( 1, loops)

def calc():
#执行2500万次计算
expr = "3 * log(a) + cos(a) ** 2"
ne.evaluate(expr)

print(ctime())
# calc共执行5次,花费1.6秒,平均每一次花费0.32秒的时间。
t = timeit.Timer( lambda: calc()).timeit( 5)
print(t)
print(ctime())
2500万次的计算需要花费0.23秒的时间(本人测试机器)


四、numexpr使用多线程

import numexpr as ne
import numpy as np
from time import ctime
import timeit

loops = 25000000
a = np.arange( 1, loops)

def calc():
#执行2500万次计算
expr = "3 * log(a) + cos(a) ** 2"
ne.evaluate(expr)

#设置多线程使用。
ne.set_num_threads( 4)

print(ctime())
# calc共执行5次,花费1.6秒,平均每一次花费0.32秒的时间。
t = timeit.Timer( lambda: calc()).timeit( 5)
print(t)
print(ctime())

2500万次的计算需要花费0.32秒的时间(本人测试机器),使用的是四线程

看来不占优势。

如果将ne.set_num_threads(4)修改为ne.set_num_threads(8),即使用8线程,可以降到0.23秒。

备注:从上面的测试可以看出,numpy的性能很不错,numexpr没有压倒性的优势。







猜你喜欢

转载自blog.csdn.net/qq_32782059/article/details/74206421
今日推荐