与Matlab和Scilab相比,Octave的性能

时间:2018-05-05 01:51:39

标签: matlab wolfram-mathematica octave scilab

我在Octave,Scilab和Matlab提示符下测试以下命令。

>>  A = rand(10000,10000);
>> B = rand(10000,1);
>> tic,A\B;, toc

时间分别为40,15.8和15.7秒。为了比较,Mathematica的表现是

In[7]:= A = RandomReal[{0, 1}, {10000, 10000}];

In[9]:= B = RandomReal[{0, 1}, 10000];

In[10]:= Timing[LinearSolve[A, B];]

Out[10]= {14.125, Null}

这是否表明Octave不如线性方程领域的其他软件那么强大?

2 个答案:

答案 0 :(得分:7)

我认为您的测试存在缺陷。 A\B背后的算法利用了方程组中的特殊模式和结构,因此执行时间在很大程度上取决于random(10000,10000)生成的内容。在我的计算机上使用Octave 4.0.0进行三次不同的运行时,您的代码会返回7.1s95.1s16.4s。这表明随机生成的第一个矩阵可能是稀疏的,当您使用Scilab和Matlab测试代码时可能就是这种情况。因此,除非你确保算法正在评估相同的事情,或者除非你以合理的方式平均执行时间(这对于我来说并不是非常简单),那么将它们作为比较是没有意义的。你做到了。

答案 1 :(得分:3)

@dimitris 谢谢你的问题,我发现你的方法对快速比较很有帮助,我现在得到的有些不同的答案很有趣。我没有其他受访者提到的问题,答案(时间)一致且有帮助。

以下是我的 Windows 机器(配备 Ryzen 7 4700U 的华硕)上的时间,我为 Scilab 6.1.0、Octave 6.2.0、Python 3.8.7 和 Julia 1.5.3 中的每一个打印了 5 次运行)-我我一直在探索如何将它们用于我目前的工作。我没有(买不起..)Matlab 或 Mathematica,所以这些没有结果..

八度

>> for i=1:5;A=rand(10000,10000);B=rand(10000,1);tic;A\B;toc,end;
  Elapsed time is 9.79964 seconds.
  Elapsed time is 9.78249 seconds.
  Elapsed time is 9.70953 seconds.
  Elapsed time is 9.73357 seconds.
  Elapsed time is 9.69932 seconds.

Scilab

--> for i=1:5;A=rand(10000,10000);B=rand(10000,1);tic;A\B;toc,end;
 ans  = 10.407628
 ans  = 10.706747
 ans  = 10.490241
 ans  = 10.773073
 ans  = 10.517951

朱莉娅

m=10000;
for i=1:5;
  A=rand(m,m);B=rand(m,1);
  t=time();A\B;
  println(time()-t)
end;
  7.833999872207642
  7.7170000076293945
  7.675999879837036
  7.76200008392334
  7.740999937057495

Python

from pylab import *
import numpy as np
import datetime as dt
N = 10000
for i in range(5):
    A = np.random.random((N,N))
    B = np.random.random((N,1))
    tic=dt.datetime.now()
    np.linalg.solve(A,B)
    print((dt.datetime.now()-tic))
  0:00:05.567395
  0:00:05.703859
  0:00:05.050467
  0:00:04.995202
  0:00:05.294050