您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關提升python運行速度的方法,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
python一直被病垢運行速度太慢,但是實際上python的執行效率并不慢,慢的是python用的解釋器Cpython運行效率太差。
“一行代碼讓python的運行速度提高100倍”這絕不是嘩眾取寵的論調。
我們來看一下這個最簡單的例子,從1一直累加到1億。
最原始的代碼:
import time def foo(x,y): tt = time.time() s = 0 for i in range(x,y): s += i print('Time used: {} sec'.format(time.time()-tt)) return s print(foo(1,100000000))
結果
Time used: 6.779874801635742 sec 4999999950000000
是不是快了100多倍呢?
那么下面就分享一下“為啥numba庫的jit模塊那么牛掰?”
NumPy的創始人Travis Oliphant在離開Enthought之后,創建了CONTINUUM,致力于將Python大數據處理方面的應用。最近推出的Numba項目能夠將處理NumPy數組的Python函數JIT編譯為機器碼執行,從而上百倍的提高程序的運算速度。
Numba項目的主頁上有Linux下的詳細安裝步驟。編譯LLVM需要花一些時間。
Windows用戶可以從Unofficial Windows Binaries for Python Extension Packages下載安裝LLVMPy、meta和numba等幾個擴展庫。
下面我們看一個例子:
import numba as nb from numba import jit @jit('f8(f8[:])') def sum1d(array): s = 0.0 n = array.shape[0] for i in range(n): s += array[i] return s import numpy as np array = np.random.random(10000) %timeit sum1d(array) %timeit np.sum(array) %timeit sum(array) 10000 loops, best of 3: 38.9 us per loop 10000 loops, best of 3: 32.3 us per loop 100 loops, best of 3: 12.4 ms per loop
numba中提供了一些修飾器,它們可以將其修飾的函數JIT編譯成機器碼函數,并返回一個可在Python中調用機器碼的包裝對象。為了能將Python函數編譯成能高速執行的機器碼,我們需要告訴JIT編譯器函數的各個參數和返回值的類型。我們可以通過多種方式指定類型信息,在上面的例子中,類型信息由一個字符串'f8(f8[:])'指定。其中'f8'表示8個字節雙精度浮點數,括號前面的'f8'表示返回值類型,括號里的表示參數類型,'[:]'表示一維數組。因此整個類型字符串表示sum1d()是一個參數為雙精度浮點數的一維數組,返回值是一個雙精度浮點數。
內容擴展:
Python運行速度提升
相比較C,C++,python一直被抱怨運行速度很慢,實際上python的執行效率并不慢,而是解釋器Cpython運行效率很差。
通過使用numba庫的jit可以讓python的運行速度提高百倍以上。
同諾簡單累加,相乘的例子,可以看出。
#!/usr/bin/env python # encoding: utf-8 ''' @author: Victor @Company:華中科技大學電氣學院聚變與等離子研究所 @version: V1.0 @contact: 1650996069@qq.com 2018--2020 @software: PyCharm2018 @file: quickPython3.py @time: 2018/9/21 20:54 @desc:使用numba的jit是python代碼運行速度提高100倍左右 ''' '''平常運行''' import time def add(x,y): tt = time.time() s = 0 for i in range(x,y): s += i print('The time used: {} seconds'.format(time.time()-tt)) return s add(1,100000000) ##########結果############### # D:\Python3\python.exe D:/Pycharm2018Works/InsteringPython3/SomeBasics/quickPython3.py # The time used: 6.712835788726807 seconds # Process finished with exit code 0
'''調用numba運行''' import time from numba import jit @jit def add(x,y): tt = time.time() s = 0 for i in range(x,y): s += i print('The time used: {} seconds'.format(time.time()-tt)) return s add(1,100000000) ##########結果############### # D:\Python3\python.exe D:/Pycharm2018Works/InsteringPython3/SomeBasics/quickPython3.py # The time used: 0.06396007537841797 seconds # # Process finished with exit code 0
Numba模塊能夠將處理NumPy數組的Python函數JIT編譯為機器碼執行,從而上百倍的提高程序的運算速度。
關于提升python運行速度的方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。