是什麼
numba是乙個的即時編譯器(just-in-time compiler)。即它能在程式執行時,使用llvm編譯器庫將python函式轉換為優化的機器碼。從而使得執行速度可以達到c或fortran的速度。
怎麼用
只需用numba去修飾python函式即可。換言之,不需要替換python直譯器、執行單獨的編譯步驟、安裝c/ c++編譯器等額外操作。
問題描述
對於矩陣連乘:un.
..u2
u1
ρu_n...u_2u_1\rho
un...
u2u
1ρ, 原方法是用for迴圈累乘.測試下用numba.jit修飾後效率是否有提公升.
使用注意: array的資料型別必須一樣,否則會報錯.
例項**
def f(u, rho):
for i in range(len(u)):
rho = np.dot(u[i] ,rho)
@numba.jit(nopython=true)
def f_jit(u, rho):
for i in range(len(u)):
rho = np.dot(u[i] ,rho)
a = np.array([[0.1,0.2],[0.3,0.4]])
u = np.array([a]*500)
rho = np.array([[0.5,0.5],[0.5,0.5]])
%timeit f(gates, rho)
%timeit f_jit(gates, rho)
結果分析
對這個測試例項,提公升近3倍.
114 µs ± 1.31 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
38.6 µs ± 1.09 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
問題描述: 矩陣累加,測試用numba後,是否有效率提公升.
例項**
def f(a):
c = 0
for a in a:
c = c + a
return c
@numba.jit(nopython=true)
def f_jit(a):
c = np.zeros(a[0].shape,dtype=a.dtype)
for a in a:
c = c + a
return c
a=for i in range(1000):
a = np.random.uniform(-1,1,(16,16))
a = np.asarray(a)
%timeit f(a)
%timeit f_jit(a)
結果分析
對這個測試例項,提公升1-2倍
2.81 ms ± 44.6 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
1.05 ms ± 38 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)
通過 LLVM 加速 Python numba
numba是cython的競爭專案。同樣的,numba把python原始碼通過llvmpy生成jit後的.so檔案來加速。不同點 1.numba是以jit為主的,加速對原始碼的侵入性較小。2.cython則重點在加速高效能python模組的開發上,不依賴llvmpy專案。3.numba還很不成熟,目...
提公升程式設計師效率
筆者工作多年,總結了一些經驗,可以幫助大家成為乙個更加高效的程式設計師。程式設計法則,與設計和工程的原理密切相關。下面這些程式設計法則幫助我讓我獲益匪淺,所以我想分享給大家,希望也能幫助大家更高效,生產出的 更容易維護,並且bug和缺陷更少。dry原則 不要重複 don t repeat yours...
程式設計師的提公升
引用 1.太害怕學不會新的工具 語言和框架 一般的程式設計師會墨守他們最喜歡的工具,而不希望學習新的,因為他們認為,離開了那些語言和工具,多年的經驗就會付諸東流。而強大的程式設計師會擁抱那些挑戰和機會,積極地學習新的工作方式。2.直到特性 完成 的時候才會提交。但永遠都不會完成!他在markedup...