【问题标题】:matlab - Do I have to clear variables each time I alter my loop index?matlab - 每次更改循环索引时都必须清除变量吗?
【发布时间】:2016-09-11 05:43:27
【问题描述】:
for ii=1:5    
a(ii) = (ii)^2;
end
a

说,我将循环索引的结束值从 5 更改为 4,给出的答案仍然是 [1 4 9 16 25]

只有当我“清除所有”时,它才会给出 [1 4 9 16]

这正常吗?

【问题讨论】:

  • Im sorry is [1 4 9 16] A 在您编辑结束索引或运行循环之后的结果?
  • 使用新值运行循环后
  • 我想我明白为什么了。也许是因为我没有预先分配/初始化 A
  • 清除具体变量就够了,也'clear a'

标签: matlab loops for-loop


【解决方案1】:

是的,这很正常!

当你运行这个时:

for ii=1:5    
   a(ii) = (ii)^2;
end
a

正如您所料,它为您提供:a = [1 4 9 16 25]。注意a的大小设置为1x5。

现在当你运行这个时:

for ii=1:4    
   a(ii) = (ii)^2;
end
a

您实际上正在替换 a 的 1 到 4 索引的先前值(使用相同的值),但您没有对 a 的第 5 索引执行任何操作,因此它保持原样。

运行以下(不清除变量)以获得更好的理解:

for ii=1:4    
   a(ii) = (ii)^5;
end
a

这会给你:a = [1 32 243 1024 25]

我希望这能回答你的问题!

【讨论】:

    【解决方案2】:

    您描述的行为是完全正常的。由于您首先定义了一个包含 5 个元素的数组,因此第二个 for 循环仅更改 a 数组的前 4 个元素。

    但是请注意,有一种替代方法可以避免您描述的问题。 MATLAB 强烈建议使用vectorization 来避免此类问题。

    如果您将其编码为:

    a=(1:5).^2 % define a
    ... % some operations
    a=(1:4).^2 % redefine a
    

    那么,您不仅不需要清除变量,还可以获得更简洁、更易于阅读的代码。记得使用元素取幂.^,否则你会得到error

    另外,请注意不推荐使用clear all 命令。您应该clear,从工作区中删除所有变量,或clear a,只清除a 变量,而不是clear alldocumentation on the clear function 描述了您使用 clear all 清除的其他内容,并且在大多数情况下,这不是您想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-19
      • 2020-08-07
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      • 2023-02-10
      • 1970-01-01
      相关资源
      最近更新 更多