給Python加速(效能加速的方法)

2021-08-13 18:07:57 字數 1692 閱讀 2986

轉譯解讀

首先提高**的效能不能以改變**功能為代價。

簡而言之,按照原文說的:

詳細的解讀包括:

選擇乙個正確的資料結構。

這個說法深有體會。python中多變的資料結構可以造成很大的差異,使用乙個set就可以事半功倍。甚至乙個自己定義的資料結構,對於記憶體,運算速度,處理方式等都有很大的影響。

進行排序

我在專案中也遇到過,爬取的幾百萬的資料url需要進行鑑別,哪些資料抓取了哪些沒有,抓取的部分還有重複。使用if x in y這種格式,則需要o(m*n)的時間複雜度。而兩邊都對url進行排序後,則可以使用兩個指標輕鬆搞定。

示例中使用了operator模組的itemgetter()函式,進行了快速的分類,優雅而簡潔。

n = 1

import operator

nlist.sort(key=operator.itemgetter(n))

字串組合

編寫大字串的時候,不建議使用加號拼接字串。使用join,%s(py3中使用format方法)等官方的方法效果更好。

迴圈的使用

如果使用for迴圈進行簡單而大量的操作,不妨試試map()函式,或者python2.0中就已經有的list方法直接生成。或者使用迭代器進行迴圈的操作。

避免使用點方法

upper = str.upper

newlist =

for word in oldlist:

使用區域性變數

可以將一些**函式化,從而將變數轉為區域性變數,python獲取區域性變數比使用全域性變數要快得多。

原文最終做了乙個比較實驗,將38470個單詞轉換成大寫,結果是:

version time (seconds)

basic loop 3.47

eliminate dots 2.45

local variable & no dots 1.79

using map function 0.54

可見使用map具有巨大的優勢。

初始化字典元素

字典的當前使用新技巧包括:使用keyerror來定位沒有的key,使用get()方法來返回鍵對應的值。字典中還有collections模組中較多的:defaultdict,ordereddict類等。

首先在頭部寫明 import 宣告

大量的import會影響python的效能。雖然隨處可以import, 但最好在**的頭部集中寫明。

資料的聚合

一次將多個資料聚合起來傳遞給函式比多次呼叫函式的開銷要小得多。

減少執行語句的數量

python中有乙個定期檢查執行緒是否該執行的函式。這個函式的大量呼叫會影響效能。最好我們可以設定這個值為較大的數,或者使用少的執行語句而以空間換時間。

python不是c

移位不一定比加法快。python是乙個高階語言,呼叫底層不一定快。

使用xrange而不是range

在py3中不用考慮這一條。因為range已經優化了。

對**進行優化

有時候有些函式你知道不會執行,就可以直接省略。減少不必要的操作。

使用profile

import profile

profile.run('main()')

加速Mysql repair table的方法

set session myisam sort buffer size 256 1024 1024 set session read buffer size 64 1024 1024 set global myisam max sort file size 100 1024 1024 1024 se...

如何給深度學習加速 模型壓縮 推理加速

深度學習模型往往受到端計算力的限制,無法很好的部署在移動端或無法降低端的計算成本。例如自動駕駛的模型就過於巨大,而且往往是很多模型並行,所以一般會用一些加速的方法來降低推算的計算力要求。加速方法有多種不同角度 網路結構,模型推理加速,模型剪枝,引數量化等。table of contents 網路結構...

用IPP給OpenCV加速

用ipp給opencv加速 因為opencv曾由intel效能基元 ipp 團隊主持,而且幾個主要開發者都與ipp團隊保持著良好的關係,所以opencv利用了ipp高度手工優化的 來實現加速。使用ipp獲得的提速是非常顯著的。圖1 4比較了另外兩個視覺庫lti lti 和vxl vxl 與openc...