如何使Matlab程序的执行速度更快?

bza*_*zak 3 performance speed matlab

是否有任何技术可以使 MATLAB 代码执行得更快?

我正在谈论可以使我的 PC 更快的事情(例如停止某些 .exe 或软件以提高 PC 性能)。我注意到有时我的 PC 在两个不同的时间运行相同的任务:例如,他可以在 45 秒内运行一个程序,而在 10 分钟内再次运行同一个程序。

Cli*_*ord 7

是 MATLAB 在您的计算机上运行缓慢还是您在 MATLAB 中编写的程序运行缓慢?

MATLAB 大量使用动态内存分配和重新分配;MAtrix 或数组调整大小可能非常缓慢且不确定;如果矩阵或数组增长,则在删除旧副本之前分配新内存并将现有数据复制到新内存。您可以通过预先分配此类数组来避免这种内存颠簸:例如以下代码:

x = 0;
for k = 2:1000
   x(k) = x(k-1) + 5;
end
Run Code Online (Sandbox Code Playgroud)

导致x在每次迭代时调整大小,并且运行速度非常慢。对比如下代码:

x = zeros(1, 1000);
for k = 2:1000
   x(k) = x(k-1) + 5;
end
Run Code Online (Sandbox Code Playgroud)

预先分配阵列,这样就不会发生调整大小,并且运行速度会快得多。

MathWorks 网站有一整页详细介绍了此技术和其他性能改进技术;该页面包括以下内容:

  • 预分配数组
  • 对大型数据集使用分布式数组
  • 如果可能,将 for 替换为 parfor(Parallel for)
  • 限制大小和复杂性
  • 分配给变量
  • 使用适当的逻辑运算符
  • 重载内置函数
  • 函数通常比脚本快
  • 加载和保存比文件 I/O 函数更快
  • 矢量化循环
  • 避免大型后台进程

请注意,您建议的解决方案在 MathWorks 的列表中排在最后,您应该首先查看所有其他要点,除非您正在做一些明显需要资源的事情,例如运行虚拟机或在运行 MATLAB 的同时播放高清视频,看着正在运行的其他进程可能是汗流浃背的小东西。