python是一種解釋型的語言,本身的計算效能並不高。但是python已經發展成為了一種訪問高效能技術的理想平台,不同庫的使用將大大影響運算的速度。
下面就各種計算庫的計算速度做乙個簡單的測試:
一、math庫的計算
from math
import *
from time
import ctime
import timeit
loops =
25000000
a =
range(
1, loops)
deff( 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)
defcalc():
#執行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)
defcalc():
#執行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)
defcalc():
#執行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沒有壓倒性的優勢。
Python效能優化
python是資料分析神器。你肯定會遇到效能上的問題,比如一段程式要跑好幾個小時,但其實你優化一下程式,就只花幾分鐘而已。下面是一些效能優化上的建議 1.盡可能地減少io操作 io操作是非常耗時的,相對於cpu運算來說。一次檔案讀取,請取出你後面可能用到的最多資料。2.減少迴圈的使用 盡可能地在一次...
效能優化一
4 硬體效能優化 硬體效能指由硬體或軟體引起的導致電池消耗的效能,具體包括螢幕 感測器 cpu wakelock jobscheduler等耗電效能。4.1電量資訊獲取 通過手機系統檔案。直接通過手機系統檔案 sys class power supply battery uevent 來獲取手機電量...
python 之效能優化
類似 os.linesep 這樣的名字需要直譯器做兩次查詢 1 查詢os 以確認它是乙個模組,2 在這個模組中查詢 linesep 變數。因為模組也是全域性變數,我們多消耗了系統資源。如 果你在乙個函式中類似這樣頻繁使用乙個屬性,我們建議你為該屬性取乙個本地變數別名。變 量查詢速度將會快很多 在查詢...