原始的MATLAB代码只需大约10分钟即可运行 . 程序的缓慢部分是关于声明的for循环,用从文档读取的信息填充矩阵,并用这些矩阵进行计算 .
根据经验,如果你在Octave程序中看到一个包含许多迭代的for循环,那将不是一个好的程序 . Matlab曾经是相同的,但现在他们有一个不错的JIT加速了这些草率的代码 . 如果您的代码是矢量化的,那么您不应该看到Octave和Matlab之间存在很大差异 .
怎么做,取决于你的问题 . 许多函数实际上可以正常使用数组,只是人们不会那样使用它们 . 进入你的for循环,然后将每一行放在循环之外,一个接一个 . 根据您的问题,这可能并不容易 . 另一种方法是,如果循环迭代彼此独立,则考虑使用并行包 .
作为一个例子,我曾经有一个程序,在Matlab运行约20分钟 . 在Octave,我在2天后杀了它 . 主要问题是两个for循环,其中一个迭代遍历512 * 512 * 2000图像的每个像素 . 矢量化后,Octave在2分钟内运行它 . 我不得不移植许多Matlab程序,这很常见 .
编辑(回答评论):有很多关于矢量化的例子和教程,但没有银弹 . 解决方案通常是唯一的,它将取决于您的代码 . 对于连续元素之间差异的特定情况,您应该使用 diff 来获取差异数组,然后对其进行处理 . 向量化代码看起来会增加内存使用量,但会更快 .