こんにちは、numpy + numba を使用して科学計算を実行しています。numpy 配列のインプレース追加が非常に遅いことに気付きました... matlab と比較して
ここに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 ループから足し算を引き出し、1 つの行列の足し算を numpy.add と比較すると、numpy と matlab の速度は同等のようです。
私が知っている 1 つの要因は、matlab が version>=2012a の JIT を使用して for ループを高速化することですが、python コードで numba を試してみましたが、それでも少しも高速化されません。これは numba が numpy.add 関数にまったく触れていないことが関係していると思います。そのため、パフォーマンスはまったく変わりません。
この場合、matlabはいくつかの病気のキャッシュを行うと推測しているため、numpyを劇的に打ち負かします。
numpy を高速化する方法に関する提案はありますか?