我最近用Numpy将一个MATLAB脚本转换成Python,发现它运行速度明显较慢。我期望有类似的表现,所以我想知道我是否做错了什么。在
作为简单的例子,我手动求和一个几何级数:
MATLAB版本:function s = array_sum(a, array_size, iterations)
s = zeros(array_size);
for m = 1:iterations
s = a + 0.5*s;
end
end
% benchmark code
array_size = 500
iterations = 500
a = randn(array_size)
f = @() array_sum(a, array_size, iterations);
fprintf('run time: %.2f ms\n', timeit(f)*1e3);
Python/Numpy版本:
^{pr2}$
在我的机器上,MATLAB在58毫秒内完成,Python版本在292毫秒内运行,或者慢5倍。在
我还尝试通过添加Numba JIT decorator@jit('f8[:,:](i8, i8)', nopython=True)来加快Python代码的速度,但时间只下降到236毫秒(慢了4倍)。在
这比我预料的要慢。我使用时间不恰当吗?我的Python代码有问题吗?在
编辑:进行编辑,以便在基准功能之外创建随机矩阵。在
编辑2:我使用Torch而不是Numpy运行基准测试(计算总和为s = torch.add(s, 0.5, a)),它在我的计算机上只运行了52毫秒!在