国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

一行代碼讓 Python 的運行速度提高100倍

2020-02-15 23:07:27
字體:
來源:轉載
供稿:網友

python一直被病垢運行速度太慢,但是實際上python的執行效率并不慢,慢的是python用的解釋器Cpython運行效率太差。

“一行代碼讓python的運行速度提高100倍”這絕不是嘩眾取寵的論調。

我們來看一下這個最簡單的例子,從1一直累加到1億。

最原始的代碼:

import timedef 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 sprint(foo(1,100000000))

結果:

Time used: 6.779874801635742 sec
4999999950000000

我們來加一行代碼,再看看結果:

from numba import jitimport time@jitdef 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 sprint(foo(1,100000000))

結果:

Time used: 0.04680037498474121 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 nbfrom 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 simport numpy as nparray = np.random.random(10000)%timeit sum1d(array)%timeit np.sum(array)%timeit sum(array)10000 loops, best of 3: 38.9 us per loop10000 loops, best of 3: 32.3 us per loop100 loops, best of 3: 12.4 ms per loop

numba中提供了一些修飾器,它們可以將其修飾的函數JIT編譯成機器碼函數,并返回一個可在Python中調用機器碼的包裝對象。為了能將Python函數編譯成能高速執行的機器碼,我們需要告訴JIT編譯器函數的各個參數和返回值的類型。我們可以通過多種方式指定類型信息,在上面的例子中,類型信息由一個字符串'f8(f8[:])'指定。其中'f8'表示8個字節雙精度浮點數,括號前面的'f8'表示返回值類型,括號里的表示參數類型,'[:]'表示一維數組。因此整個類型字符串表示sum1d()是一個參數為雙精度浮點數的一維數組,返回值是一個雙精度浮點數。

需要注意的是,JIT所產生的函數只能對指定的類型的參數進行運算:

print sum1d(np.ones(10, dtype=np.int32))print sum1d(np.ones(10, dtype=np.float32))print sum1d(np.ones(10, dtype=np.float64))1.2095376009e-3121.46201599944e+18510.0            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长泰县| 宁阳县| 井研县| 内丘县| 斗六市| 尚义县| 铜梁县| 沧源| 彝良县| 邵阳市| 彝良县| 黑河市| 望都县| 简阳市| 衡南县| 小金县| 盐亭县| 普兰店市| 泸西县| 都兰县| 雷州市| 紫阳县| 石嘴山市| 廊坊市| 府谷县| 蒲江县| 安远县| 罗平县| 鹤山市| 屏东县| 桃源县| 沙河市| 石屏县| 和田市| 怀安县| 托克逊县| 黄浦区| 云安县| 河津市| 河北区| 慈利县|