Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中从其他变量创建变量:带复制的代码_Matlab_Variables - Fatal编程技术网

在MATLAB中从其他变量创建变量:带复制的代码

在MATLAB中从其他变量创建变量:带复制的代码,matlab,variables,Matlab,Variables,我对这类代码有一个问题: 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 这是我问题

我对这类代码有一个问题:

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_变量
等于
“First”
。但是我希望它是
“A”
然后
“B”
然后
“C”
来自名为
“First”
的变量

据我所知,此代码应执行以下操作:

  • 第一步:
    对于gr=组
    表示gr=第一到第二
  • 第二步:
    current=gr表示当前=第一个
  • 第三步:
    对于number=1:numel(当前)
    表示number=1:3(第一步中的元素数量)
  • 第四步:
    my_变量(编号)=当前(编号)表示my_变量=第一(1)=“A”
相反,我得到的变量
等于
“First”
“Second”

我希望你明白我的意思


另外,我使用的双引号(
)像
First=[“A”,“B”,“C”]仅在Matlab 2016b或更高版本中可用。

您应该使用:

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
对于第一个
和第二个
,您还可以使用字符串数组:

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
您应该使用来执行此操作:

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
对于第一个
和第二个
,您还可以使用字符串数组:

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

您误解了步骤3
numel(当前)=numel('First')=5
因为在字符串
First
中有5个元素。您可以使用
numel(eval(current))
从字符串中计算变量,但请不要这样做-使用
eval
是一种不好的做法,尤其是在像这里这样容易避免的情况下。相反,请尝试使用结构或单元格数组谢谢您的评论!现在我明白了我的理解与Matlab想要做的不同。不幸的是,将这些变量更改为单元格数组/结构数组并不会更改错误的输出(仍然获取变量“First”或“Second”的名称,而不是相应的值,例如“A”或“B”。我将使用eval尝试此方法:(.此外,使用“eval”的方法当然适用于计数(步骤3),但这并不是我上面描述的真正问题的解决方案。您还有其他想法吗?谢谢!您实际期望输出在这里是什么样子的?因为即使这样做了,您也会用
中的值过度写入
my_变量
,而从
第一个
中提取的值会丢失…是的,你是对的,但我可以稍后再修复它。真正的问题是我想在另一个变量中存储两个变量,我想在循环中使用另一个变量。我的解决方案需要的是循环,首先它取第一个变量的每个元素(即从变量开始,先取“a”、“B”再取“C”);然后在循环中,它从变量Second中获取每个元素——“D”、“E”、“F”)。我在为循环创建这个变量“Group”时出错,因为在代码中它总是一个字符串、结构或单元格,但它从未创建到实存变量“First”或“Second”的“link”。您误解了步骤3。
numel(current)=numel('First')=5
如中所示,字符串
First
中有5个元素。您可以执行
numel(eval(current))
这将从字符串中计算变量,但请不要-使用
eval
是一种不好的做法,尤其是在像这里这样容易避免的情况下。请尝试使用structs或cell array谢谢您的评论!现在我明白了我的理解与Matlab想要做的有什么不同。不幸的是,将这些变量更改为单元格数组/结构数组,不会更改错误的输出(仍然获取变量“First”或“Second”的名称,而不是相应的值,例如“A”或“B”。我将使用eval来尝试此方法:(。此外,使用“eval”的方法当然可以用于计数(步骤3),但这并不是我上面描述的真正问题的解决方案。您还有其他想法吗?谢谢!您实际期望输出在这里是什么样子的?因为即使这样做了,您也会用
中的值过度写入
my_变量
,而从
第一个
中提取的值会丢失…是的,你是对的,但我可以稍后再修复它。真正的问题是我想在另一个变量中存储两个变量,我想在循环中使用另一个变量。我的解决方案需要的是循环,首先它取第一个变量的每个元素(即从变量开始,先取“a”、“B”再取“C”);然后在一个循环中,它从变量Second中获取每个元素——“D”、“E”、“F”)。我在为循环创建这个变量“Group”时犯了一个错误,因为在代码中它总是一个字符串、结构或单元格,但它从未创建到实际存在的变量“First”或“Second”的“link”。