當你尋找這種問題的時候,很開心,你的**水平以及對python的各種資料型別的認知會上公升乙個台階!
我是什麼時候開始思考這種問題的呢?當然是有一天發現模型跑資料的時候,程式一直在執行但卻一直不出最終結果,然後發現作者寫的**真的是低效,不得不說,會寫模型的人不一定會寫**!
1. 用 set 而非 list 進行查詢(初學者的通病)
低效方法:
list_data =
[i for i in
range
(1000000)]
1098987
in list_data # 13.4 ms
高效方法:
set_data =
set(list_data)
1098987
in set_data # 10.3 us
原理很簡單:list 是線性查詢(即從前向後乙個元素乙個元素的查詢),set 是通過hash查詢(通過hash函式直接定位)
2. 用 dict 而非兩個 list 進行匹配查詢
低效方法:
list_a =
[i for i in
range
(1000000)]
list_b =
[i**
2for i in list_a]
print
(list_b[list_a.index(
876567)]
)# 7.5 ms
高效方法:
dict_ab =
dict
(zip
(list_a, list_b)
)print
(dict_ab.get(
876567
,none))
# 141 us
在迴圈中避免重複計算
低速方法:
a =
[i for i in
range
(2000)]
b =[i/
sum(a)
for i in a]
# 32.8 ms
高效方法:
sum_a =
sum(a)
b =[i/sum_a for i in a]
# 266 us
可以參考我之前博文 一篇文章學習python多程序 加速你的 Ubuntu Feisty Fawn
方法來自這篇文章 feisty performance fly like a butterfly 中文翻譯 作者總結了很多關於優化和加速 feisty 的方法。按照下面的方法來做,到底有沒有實際效果,就得大家試了才知道,至少我使用後,發現啟動速度有了很大的提高。注意 以下部分步驟如果修改錯誤,會導致...
給Python加速(效能加速的方法)
轉譯解讀 首先提高 的效能不能以改變 功能為代價。簡而言之,按照原文說的 詳細的解讀包括 選擇乙個正確的資料結構。這個說法深有體會。python中多變的資料結構可以造成很大的差異,使用乙個set就可以事半功倍。甚至乙個自己定義的資料結構,對於記憶體,運算速度,處理方式等都有很大的影響。進行排序 我在...
用squid加速你的web
配置squid的配置檔案,使其支援httpd加速器工作方式。http port 引數指定squid監聽瀏覽器客戶請求的埠號,這裡當然是80了 cache dir ufs tmp 256 16 256 cache dir引數設定使用的儲存系統的型別。一般情況下都型別應該是ufs,目錄應該是 tmp 在...