我正在運行簡單的測試,看看 numba.jit 是如何提高 numpy 數組循環函數的速度的。但是,在這兩個示例中:def f(): a=np.ones(1000) for i in range(100000): a+=np.random.normal(0,1,1000)%time f()和from numba import jit@jitdef g(): a=np.ones(1000) for i in range(100000): a+=np.random.normal(0,1,1000)%time g()我得到:CPU 時間:用戶 3.75 秒,系統:0 ns,總計:3.75 秒掛墻時間:3.75 秒CPU 時間:用戶 3.86 秒,系統:4.11 毫秒,總計:3.86 秒掛墻時間:3.84 秒所以 numba.jit 在這種情況下似乎沒有任何影響。這是為什么?
2 回答

慕田峪7331174
TA貢獻1828條經驗 獲得超13個贊
目前尚不清楚為什么您認為應該進行改進。我通過添加一個帶有 的內部循環看到了改進numba,這可能是因為 JIT 編譯可以使用更基本的、較低級別的類型優化操作。
# python 3.6.0, numpy 1.11.3, numba 0.30.1
np.random.seed(0)
def f(m, n):
a = np.ones(n)
for i in range(m):
a += np.random.normal(0,1,n)
return a
@jit
def g(m, n):
a = np.ones(n)
for i in range(m):
x = np.random.normal(0,1,n)
for j in range(n):
a[j] += x[j]
return a
%timeit f(10**5, 10**3) # 6.53 s per loop
%timeit g(10**5, 10**3) # 4.68 s per loop
添加回答
舉報
0/150
提交
取消