我有一个在Matlab应用程序设计器中编写的应用程序,它是在Matlab 2020a(v9.10运行时环境(中构建的。不过,我必须在v9.7运行时中编译它。当我这样做的时候,它的运行速度要慢得多。从概念上讲,运行最慢的函数是:
Output = ones(length(A),length(B));
Temp = [];
for ii = 1:length(A)
for jj = 1:length(B)
Temp = [Temp; Output(ii,jj)];
end
end
上面的代码总共运行了150万到200万个周期。当我在v9.10中编译和运行时,这段代码是可以管理的,但在v9.7中速度明显减慢。我不确定这在这一点上是否可以解决,但我想给出一个更正式的理由来解释为什么这不起作用。
谢谢。
它在较新的MATLAB中工作得更快的原因是MATLAB随着每个版本的改进而改进,显然在这两个版本之间,他们设法改进了给定代码的编译方式。
代码中有两个大问题使其速度非常慢:
-
没有预分配,
Temp
随着每次循环迭代而增长。这很慢。预分配将使代码变得更快。 -
数组
Temp
通过串联增长,这是增长最慢的形式。更好的方法是Temp(end+1) = Output(ii,jj);
,它以几何方式增长底层内存。请参阅此处了解详细信息。
注意,代码可以按如下方式进行平凡的矢量化:
Temp = Output.';
Temp = Temp(:);
这可能会使MATLAB的两个版本中的代码都更快。