我看到Numba不支持Dict-of-Lists ... 因此,我決定使用2D Numpy陣列來代替。這很可悲:(
)我遇到的第二個問題是,我想按需創建這個陣列。下面是一個例子:
@nb.njit(parallel=True)
def blah(cond=True)。
ary = None
if cond : ary = np.zeros((10000, 2)
for i in range(5)。
if cond: ary[i] = np.array([i,i])
return 555, ary
問題是ary不能是None,所以我必須分配陣列,即使我不使用它。
有沒有一種方法來定義ary而不分配它,這樣Numba就不會抱怨?
"并行 "似乎導致了這個問題?"并行 "是什么?
有趣的是,這只更新了第一行(i被遞增):
ary[i,:] = np.array([a,b])
但這也可以
ary[i] = np.array([a,b])
uj5u.com熱心網友回復:
如果你希望代碼被并行化,那么是的,它絕對要先被分配。你不可能讓多個執行緒獨立地調整一個陣列的大小。
uj5u.com熱心網友回復:
你可以考慮分配一個零大小的陣列而不是無。這將使得無論條件是真還是假,其型別都是相同的。
@nb.njit(parallel=True)
def blah(cond=True)。
if cond:
ary = np.zeros((10000,2)
else:
ary = np.zeros((0,0)
for i in range(5)。
if cond:
ary[i , :] = (i, i)
return ary
blah(cond=False)
避免在回圈的每個迭代中初始化一個新的陣列(np.array([i, i]))也會快很多,當然如果這是有可能的話。
在回圈中明確使用 Numba 的 prange 可能會有一些幫助,但是通常只有在你在回圈中進行更密集的計算時才會有意義。這個例子非常簡單,并行化的開銷其實并不值得。
for i in nb.prange(10000)。
if cond:
ary[i, 0] = i
ary[i, 1] = i
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/326854.html
標籤:
