Matlab的循环变量

时间:2019-01-27 22:40:32

标签: matlab

我是Matlab的新手,正在尝试了解for循环如何工作。具体来说,我希望从标准均匀分布中生成100张平局,并每次计算平均值,然后重复此过程500次。此后,我希望将平均值存储在向量中。

实现此目标的一种方法是:

U = [];
Average = [];

for i = 1:500
    U = rand(1, 100);
    Average = [Average mean(U)];
    U = [];
end

直觉很简单。我为U和平均值创建一个空向量。之后,我从标准统一中提取100个实现,计算平均值,存储平均值,清空U向量,然后重复。该过程有效,但我只想澄清一件事:尽管这是一个for循环,其中i是循环变量,但是i不会出现在体内的任何位置。我的问题是:如果循环变量没有出现在主体中,该过程是否只是重复了等于for命令中指定的1单位增量的次数?

1 个答案:

答案 0 :(得分:2)

for i = 1:500

在每次迭代时将表达式的列分配给变量。由于1:500是行向量,因此i将在每次迭代时采用标量值。如果它是MxN矩阵,则i将在每一步都是Mx1列。列数决定了迭代次数,而与循环变量无关。

您可以随意使用i做任何事情,包括忽略它。实际上,您甚至可以为其分配内容,但是在下一次迭代时,该值将重置为循环所需的任何值。

循环之前和循环中的分配U = [];是不必要的。它会创建一个新的空数组,但是在您进行U = rand(1, 100);时会立即将其丢弃。该分配本身足以丢弃以名称U存储的任何内容。

不建议先使用Average = [];设置平均值,然后再使用Average = [Average mean(U)];更新平均值。这样做不必要地昂贵,因为每次您都必须重新分配内存以容纳大小为i的数组时。更好的选择是预先分配所有500个元素,并使用i将想要的值存储到正确的索引中。像

Average = zeros(1, 500);
for i = 1:500
    Average(i) = mean(rand(1, 100))
end

但是,当然,正如Cris Luengo's comment所暗示的,MATLAB完全是关于向量化的。真正需要循环的情况并不常见。您可以通过将所需的所有样本生成为一个100x500矩阵并沿第一维取平均来执行您要查找的特定操作。

Average = mean(rand(100, 500), 1)