嗨,我正在运行使用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