這篇文章主要介紹提升python運(yùn)行速度的有效方式,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)從2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元寶豐做網(wǎng)站,已為上家服務(wù),為寶豐各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220
python一直被病垢運(yùn)行速度太慢,但是實(shí)際上python的執(zhí)行效率并不慢,慢的是python用的解釋器Cpython運(yùn)行效率太差。
“一行代碼讓python的運(yùn)行速度提高100倍”這絕不是嘩眾取寵的論調(diào)。
我們來看一下這個(gè)最簡(jiǎn)單的例子,從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))
結(jié)果
Time used: 6.779874801635742 sec 4999999950000000
是不是快了100多倍呢?
那么下面就分享一下“為啥numba庫的jit模塊那么牛掰?”
NumPy的創(chuàng)始人Travis Oliphant在離開Enthought之后,創(chuàng)建了CONTINUUM,致力于將Python大數(shù)據(jù)處理方面的應(yīng)用。最近推出的Numba項(xiàng)目能夠?qū)⑻幚鞱umPy數(shù)組的Python函數(shù)JIT編譯為機(jī)器碼執(zhí)行,從而上百倍的提高程序的運(yùn)算速度。
Numba項(xiàng)目的主頁上有Linux下的詳細(xì)安裝步驟。編譯LLVM需要花一些時(shí)間。
Windows用戶可以從Unofficial Windows Binaries for Python Extension Packages下載安裝LLVMPy、meta和numba等幾個(gè)擴(kuò)展庫。
下面我們看一個(gè)例子:
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中提供了一些修飾器,它們可以將其修飾的函數(shù)JIT編譯成機(jī)器碼函數(shù),并返回一個(gè)可在Python中調(diào)用機(jī)器碼的包裝對(duì)象。為了能
將Python函數(shù)編譯成能高速執(zhí)行的機(jī)器碼,我們需要告訴JIT編譯器函數(shù)的各個(gè)參數(shù)和返回值的類型。我們可以通過多種方式指定類型信
息,在上面的例子中,類型信息由一個(gè)字符串'f8(f8[:])'指定。其中'f8'表示8個(gè)字節(jié)雙精度浮點(diǎn)數(shù),括號(hào)前面的'f8'表示返回值類型,括號(hào)
里的表示參數(shù)類型,'[:]'表示一維數(shù)組。因此整個(gè)類型字符串表示sum1d()是一個(gè)參數(shù)為雙精度浮點(diǎn)數(shù)的一維數(shù)組,返回值是一個(gè)雙精度
浮點(diǎn)數(shù)。
以上是提升python運(yùn)行速度的有效方式的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!