【问题标题】:Creating variable from other variables in MATLAB: code with reproduction在 MATLAB 中从其他变量创建变量:具有再现性的代码
【发布时间】: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 arraysFirst = ["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”的“链接”。

标签: matlab variables


【解决方案1】:

您应该使用cell arrays 来执行此操作:

first = {'A','B','C'};
second = {'D','E','F'};
group = {first, second};
for group_ind = 1:numel(group)
    current = group{group_ind};
    my_variable = cell(1,numel(current));
    for number = 1:numel(current)
        my_variable{number} = current{number};
        disp(my_variable)
    end
end

对于firstsecond,也可以使用字符串数组:

first = ["A","B","C"];
second = ["D","E","F"];
group = {first, second};
for group_ind = 1:numel(group)
    current = group{group_ind};
    my_variable = strings(1,numel(current));
    for number = 1:numel(current)
        my_variable(number) = current(number);
        disp(my_variable)
    end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    相关资源
    最近更新 更多