新聞中心
python一直被病垢運行速度太慢,但是實際上python的執(zhí)行效率并不慢,慢的是python用的解釋器Cpython運行效率太差。

“一行代碼讓python的運行速度提高100倍”這絕不是嘩眾取寵的論調(diào)。
我們來看一下這個最簡單的例子,從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的創(chuàng)始人Travis Oliphant在離開Enthought之后,創(chuàng)建了CONTINUUM,致力于將Python大數(shù)據(jù)處理方面的應用。最近推出的Numba項目能夠?qū)⑻幚鞱umPy數(shù)組的Python函數(shù)JIT編譯為機器碼執(zhí)行,從而上百倍的提高程序的運算速度。
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 loopnumba中提供了一些修飾器,它們可以將其修飾的函數(shù)JIT編譯成機器碼函數(shù),并返回一個可在Python中調(diào)用機器碼的包裝對象。為了能
將Python函數(shù)編譯成能高速執(zhí)行的機器碼,我們需要告訴JIT編譯器函數(shù)的各個參數(shù)和返回值的類型。我們可以通過多種方式指定類型信
息,在上面的例子中,類型信息由一個字符串'f8(f8[:])'指定。其中'f8'表示8個字節(jié)雙精度浮點數(shù),括號前面的'f8'表示返回值類型,括號
里的表示參數(shù)類型,'[:]'表示一維數(shù)組。因此整個類型字符串表示sum1d()是一個參數(shù)為雙精度浮點數(shù)的一維數(shù)組,返回值是一個雙精度
浮點數(shù)。
推薦學習《Python教程》!
標題名稱:創(chuàng)新互聯(lián)Python教程:如何提升python運行速度
URL標題:http://m.5511xx.com/article/djscedg.html


咨詢
建站咨詢
