嗨,我正在運行使用numpy + numba的科學計算。 我已經意識到numpy的陣列除了就地很慢......相比MATLABNumpy切片慢?
這裏是MATLAB代碼:
tic;
% A,B are 2-d matrices, ind may not be distinct
for ii=1:N
A(ind(ii),:) = A(ind(ii),:) + B(ii,:);
end
toc;
這裏是numpy的代碼:
s = time.time()
# A,B are numpy.ndarray, ind may not be distinct
for k in xrange(N):
A[ind[k],:] += B[k,:];
print time.time() - s
結果顯示,numpy代碼比matlab慢10倍......這讓我很困惑。另外,當我把for循環添加出來,並且比較單個矩陣加法和numpy.add,numpy和matlab似乎在速度上是可比的。
我知道的一個因素是,matlab使用版本大於等於2012a的JIT來加速循環,但是我試圖在Python代碼上使用numba,它仍然無法加速。我認爲這與Numba完全沒有觸及numpy.add函數有關,因此性能根本不會改變。
我猜測matlab爲這種情況做了一些噁心的緩存,因此它戲劇性地大幅度增加了numpy。
任何有關如何加快numpy的建議?
請添加樣本輸入數據'A','B'和'ind'。您可以通過生成正確形狀的隨機數據來做到這一點。沒有這個,回答你的問題主要是猜測。 – YXD