Python性能优化(一)
来源:互联网 发布:积分统计软件 编辑:程序博客网 时间:2024/06/18 13:15
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())
二、使用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())
三、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())
四、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())
看来不占优势。
如果将ne.set_num_threads(4)修改为ne.set_num_threads(8),即使用8线程,可以降到0.23秒。
备注:从上面的测试可以看出,numpy的性能很不错,numexpr没有压倒性的优势。
阅读全文
0 0
- Python性能优化(一)
- python 性能优化(2)
- WM性能优化(一)
- ABAP 性能优化(一)
- SQL性能优化(一)
- jboss性能优化(一)
- Sql性能优化(一)
- MySQL性能优化(一)
- Android 性能优化(一)
- Android性能优化(一)
- Unity3D性能优化(一)
- J2EE性能优化(一)
- java性能优化(一)
- Android性能优化(一)
- 优化APP性能(一)
- spark性能优化(一)
- Android性能优化(一)
- JVM性能优化(一)
- Linux 内存管理浅析
- elasticsearch-翻译完结篇
- [kuangbin带你飞]专题九 连通图 A
- 汉诺塔相关问题及例题
- 查看MySQL数据库版本号的方法
- Python性能优化(一)
- scipy csr_matrix和csc_matrix函数详解
- 【Java基础 六】---内部类
- HTML5学习01-基础讲解、新特性
- 第十章:内部类
- Lintcode83 Single Number ||solution 题解
- [codevs1378]选课
- jQuery常用方法
- js常用方法整理