Python效能優化(一)

2021-08-03 08:19:46 字數 2347 閱讀 5349

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 變數。因為模組也是全域性變數,我們多消耗了系統資源。如 果你在乙個函式中類似這樣頻繁使用乙個屬性,我們建議你為該屬性取乙個本地變數別名。變 量查詢速度將會快很多 在查詢...