我已经阅读了这篇文章(MATLAB比Python更快吗?),但我发现它有很多条件语句。
我在一台仍在运行Windows XP的旧计算机上尝试了这个小实验。
在MATLAB R2010b中,我已将以下代码复制并粘贴到命令窗口中:
tic
x = 0.23;
for i = 1:100000000
x = 4 * x * (1 - x);
end
toc
x
结果是:
Elapsed time is 0.603583 seconds.
x =
0.947347510922557
然后我保存了一个包含以下脚本的
py
文件:import time
t = time.time()
x = 0.23
for i in range(100000000): x = 4 * x * (1 - x)
elapsed = time.time() - t
print(elapsed)
print(x)
我按下了 F5,结果是
49.78125
0.9473475109225565
在MATLAB中,它只需0.60秒; 而在Python中,需要49.78秒(一段漫长的时间!)。
因此问题是:是否有简单的方法使Python与MATLAB一样快?
具体来说:我如何更改我的py脚本以使其像MATLAB一样快?
更新
我已经在同一台机器上尝试了在PyPy
中进行相同实验(复制并粘贴与上述相同的代码):它在1.0470001697540283秒内完成。
我重复了1e9个循环的实验。
MATLAB结果:
Elapsed time is 5.599789 seconds.
1.643573442831396e-004
PyPy
结果:
8.609999895095825
0.00016435734428313955
我还尝试了普通的while
循环,结果类似:
t = time.time()
x = 0.23
i = 0
while (i < 1000000000):
x = 4 * x * (1 - x)
i += 1
elapsed = time.time() - t
elapsed
x
结果:
8.218999862670898
0.00016435734428313955
我马上要尝试使用NumPy
。
range
。首先,这看起来像是Python 3的代码(他正在使用Python 3的print
语法)。其次,分配那个列表只需要几毫秒的时间;优化它是错误的目标,除非他实际上遇到了空间问题。 - abarnert