MATLAB是否比Python快(简单的实验)

我读过这篇文章(MATLAB比Python快吗?),我发现它有很多ifs。

我已经在仍然可以在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

然后,我 使用以下脚本保存了文件:

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一样快?


我在

(复制和粘贴与上面相同的代码)中尝试了相同的实验:它在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

我要过一会儿再尝试 。

回答:

首先,使用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

回到顶部