【发布时间】:2016-10-14 07:54:10
【问题描述】:
假设我有如下代码段:
案例 1
n = 20;
for i = 2 : n
mat = rand([2,i]);
mat = [mat, mat(:,1)]; %add the first column to the last
%feed the variable 'mat' to a function
end
案例 2
n = 10;
list = [];
for i = 1 : n
a = rand([2,1]);
b = rand([2,2])
list = [list, [a,b]];
end
这样,MATLAB 给出如下建议:
变量“mat”似乎在每个循环中都会改变大小。考虑预分配以加快速度。
变量“列表”似乎在每个循环中都会改变大小。考虑预分配以加快速度。
我是 MATLAB 新手,所以我想知道如何处理这个问题。如何以原生 MATLAB 风格做到这一点?提前致谢。
【问题讨论】:
-
你能展示更多你的代码吗?缺少一些重要的部分,尤其是循环。另外,您是什么意思:“将第一列添加到最后一列”?您要添加,如
plus,还是替换最后一列,或者将其添加为单独的列,扩展矩阵(这就是您现在所做的)? -
问题是什么?
-
@StewieGriffin 感谢您的建议。确实我忘记了循环。
-
这个 sn-p 没有意义。您在每个迭代步骤中创建一个新矩阵,然后附加一列,然后在下一个迭代步骤中再次覆盖。这相当于:
mat = rand([2,20]); mat = [mat, mat(:,1)];,因此实际上不需要循环,您可以忘记警告...或者您可以指定要执行的操作。 -
关于您的问题... google-ing MATLAB + preallocation 将您带到这里:de.mathworks.com/help/matlab/matlab_prog/…