【发布时间】:2017-10-03 11:46:34
【问题描述】:
我对这种类型的代码有疑问:
First = ["A","B","C"];
Second = ["D","E","F"];
Group = ["First", "Second"];
for gr = Group
current = gr;
for number = 1:numel(current)
my_variable(number) = current(number);
end
end
这就是我的问题的再现。例如,在这种情况下,my_variable 等于 "First"。但我希望它是"A",然后是"B",然后是"C",来自名为"First"的变量。
据我了解,此代码应执行以下操作:
- 第一步:
for gr = Group表示 gr = First to Second - 第二步:
current = gr;表示当前 = 第一步 - 第三步:
for number = 1:numel(current)表示数字 = 1:3(“First”中的元素数) - 第四步:
my_variable(number) = current(number);表示 my_variable = First(1) = "A"
而不是我得到my variable 等于"First" 或"Second"。
希望你明白我的意思。
附:我用双引号 (" ") 使用的 string arrays 像 First = ["A","B","C"]; 仅在 Matlab 2016b 或更高版本中可用。
【问题讨论】:
-
您误解了第 3 步。
numel(current) = numel('First') = 5因为字符串First中有 5 个元素。您可以执行numel(eval(current)),这将评估字符串中的变量,但请不要 - 使用eval是不好的做法,尤其是在像这里这样容易避免的情况下。而是尝试使用结构或元胞数组 -
感谢您的评论!现在我看到我的理解与 Matlab 想要做的不同。不幸的是,将这些变量更改为元胞数组/结构数组,不会改变错误的输出(仍然得到变量“First”或“Second”的名称而不是相应的值,例如“A”或“B”。我将使用 eval 尝试此方法:(.
-
此外,带有“eval”的方法当然适用于计数(第 3 步),但这不是解决上述我真正问题的方法。你还有其他建议吗?谢谢!
-
您实际期望的输出在这里是什么样的?因为即使这符合您的预期,您也会用
Second中的值覆盖my_variable,而从First中提取的值会丢失... -
是的,你是对的,但我可以稍后修复它。真正的事情是我想将两个变量存储在另一个变量中,并且我想在循环中使用另一个变量。我的解决方案需要的是循环,首先它需要第一个变量的每个元素(即从变量首先,它需要“A”,“B”然后是“C”;然后在循环中它从变量中获取每个元素第二 - “D”、“E”、“F”)。我在为循环创建此变量“Group”时出错,因为在代码中它始终是字符串、结构或单元格,但它从未创建到真实现有变量“First”或“Second”的“链接”。