MATLAB是否比Python快(简单的实验)
我读过这篇文章(MATLAB比Python快吗?),我发现它有很多ifs。
我已经在仍然可以在Windows XP上运行的旧计算机上尝试了这个小实验。
在MATLAB R2010b中,我将以下代码复制并粘贴到“命令窗口”中:
ticx = 0.23;
for i = 1:100000000
x = 4 * x * (1 - x);
end
toc
x
结果是:
Elapsed time is 0.603583 seconds.x =
0.947347510922557
然后,我 使用以下脚本保存了文件:
import timet = 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.781250.9473475109225565
在MATLAB中,它花费了0.60秒;在Python中花了49.78秒(永恒!)。
:有没有一种简单的方法可以使Python像MATLAB一样快?
:如何更改py
脚本,使其运行速度与MATLAB一样快?
我在
(复制和粘贴与上面相同的代码)中尝试了相同的实验:它在1.0470001697540283秒内在与以前相同的计算机上完成了此操作。
我用1e9循环重复了实验。
MATLAB结果:
Elapsed time is 5.599789 seconds.1.643573442831396e-004
PyPy
结果:
8.6099998950958250.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.2189998626708980.00016435734428313955
我要过一会儿再尝试 。
回答:
首先,使用time
并不是测试这种代码的好方法。但是,让我们忽略它。
当您的代码需要执行很多循环并在每次循环中重复非常相似的工作时,PyPy的JIT将做得很好。当该代码每次都执行
完全相同
的操作时,达到可以从循环中取出的恒定值,它将做得更好。另一方面,CPython必须为每次循环迭代执行多个字节码,因此它会很慢。通过在我的计算机上进行的快速测试,CPython
3.4.1耗时24.2秒,而PyPy 2.4.0 / 3.2.5耗时0.0059秒。
IronPython和Jython也是JIT编译的(尽管使用了更通用的JVM和.NET JIT),因此,对于此类工作,它们也往往比CPython快。
通常,您还可以通过使用NumPy数组和向量运算而不是Python列表和循环来加快CPython本身的工作速度。例如,下面的代码花费0.011秒:
i = np.arange(10000000)i[:] = 4 * x * (1-x)
当然,在这种情况下,我们显式只计算一次该值并将其复制10000000次。但是我们可以强制它一次又一次地进行实际计算,它仍然只需要0.12秒:
i = np.zeros((10000000,))i = 4 * (x+i) * (1-(x+i))
其他选项包括用Cython编写部分代码(编译为Python的C扩展),以及使用Numba,后者通过JIT在CPython中编译代码。对于像这样的玩具程序,两者都不适合—如果您仅尝试优化一次性的24秒过程,那么花费在自动生成和编译C代码上的时间可能会浪费通过运行C代码而不是Python代码节省的时间。但是在现实的数字编程中,两者都是非常有用的。(而且两者都可以与NumPy很好地玩。)
而且总是会有新的项目出现。
以上是 MATLAB是否比Python快(简单的实验) 的全部内容, 来源链接: utcz.com/qa/431978.html