Python運行的慢是歷來被诟病的,
一方面和語言有關,
另一方面可能就是你代碼的問題。
語言方面的問題我們解決不了,
所以只能在編程技巧上來提高程序的運行效率。
有什麼python相關報錯解答自己不會的、或者源碼資料/模塊安裝/
女裝大佬精通技巧都可以來這裡:(https://jq.qq.com/?_wv=1027&k=dwzSWSBK)或者+V:python10010問我
首先,我們需要來衡量代碼的時間和空間的復雜性,
不然僅僅用我們的肉眼很難感受代碼時間長短的變化。
python中的profiler可以幫助我們測量程序的時間和空間復雜度。
使用時通過-o參數傳入可選輸出文件以保留性能日志。
具體使用方法如下:
python -m cProfile [-o output_file] my_python_file.py
01 使用哈希表的數據結構
如果在程序中遇到大量搜索操作時,
並且數據中沒有重復項,則可以使用查找而不是循環。
舉例如下:
可以改寫為
02 矢量化取代循環
盡量使用基於C構建的Python庫,
例如Numpy,Scipy和Pandas,
並且利用矢量化同時處理來取代程序中編寫多次處理數組單個元素的循環,
循環可能是程序優化最容易被拿來開刀的地方了。
舉例如下:
在對數組中每個元素求平方時直接用數組相乘,而不是兩個for循環。
03 精簡代碼行數
在編程時,盡量使用一些python的內置函數來精簡代碼行數,
代碼顯得簡潔凝練,大大提高代碼運行效率。
舉例如下:
可以改寫為
04 使用多進程
一般計算機都是多進程的,
那麼在執行操作時可以使用Python中的multiproccessing。
多進程可在代碼中實現並行化。
當您要實例化新進程,訪問共享內存時,
多進程成本很高,
因此如果有大量數據處理時可以考慮使用多進程。
對於少量數據,則不提倡使用多進程。
舉例如下:
可以改寫為
05 使用Cpython
Cython是一個靜態編譯器,可以為您優化代碼。加載cypthonmagic擴展並使用cython標記使用cython編譯代碼。
Cpython的安裝:
pip install Cython
Cpython的使用:
06 盡量使用csv替代xlsx
在進行數據處理時,
我需要更長的時間才能將數據加載到excel文件或從excel文件保存數據。
相反,我選擇了創建多個csv文件的路徑,
並創建了一個文件夾來對文件進行分組。
舉例如下:
可以改寫為
07 使用Numba
它是一個JIT(即時)編譯器。 通過裝飾器,Numba將帶注釋的Python和NumPy代碼編譯為LLVM 。將您的功能分為兩部分:
1.執行計算的函數 - 使用@autojit進行裝飾
2.執行IO的功能
08 使用Dask來並行化Pandas DataFrame
Dask很棒!
它幫助我處理數據框中的數值函數和並行的numpy。
我甚至試圖在集群上擴展它,它就是這麼簡單!
09 使用Pandarallel庫
Pandarallel可以將pandas操作與多個進程並行化同樣,
僅在您擁有大型數據集時使用。
對於提高Python的性能,第一是先編寫簡潔,高效的代碼。
我們必須確保代碼不會在循環中反復執行相同的計算。
第二不要為集合中的每個記錄打開/關閉IO連接。
第三要確保在不需要時不創建新的對象實例。
通過大量的編程練習,掌握一些高級的編程方法對你十分重要。
有什麼python相關報錯解答自己不會的、或者源碼資料/模塊安裝/
女裝大佬精通技巧都可以來這裡:(https://jq.qq.com/?_wv=1027&k=dwzSWSBK) 或者+V:python10010問我