Matlab 动态变量声明
假设我们已将数据加载到单元格数组中:Matlab 动态变量声明,matlab,variables,declaration,Matlab,Variables,Declaration,假设我们已将数据加载到单元格数组中: DATA={'foo',[1,5];'bar',[2,6]} 有没有办法在数据中声明以第2列内容的第1列命名的变量?有一个assignin函数,它接受一个变量名并为其指定一个特定值: for r = 1:size (DATA, 1) assignin ('caller', DATA{r,:}); end 有一个assignin函数,它接受一个变量名并为其指定一个特定值: for r = 1:size (DATA, 1) assignin ('ca
DATA={'foo',[1,5];'bar',[2,6]}
有没有办法在
数据
中声明以第2列内容的第1列命名的变量?有一个assignin
函数,它接受一个变量名并为其指定一个特定值:
for r = 1:size (DATA, 1)
assignin ('caller', DATA{r,:});
end
有一个
assignin
函数,它接受一个变量名并为其指定一个特定值:
for r = 1:size (DATA, 1)
assignin ('caller', DATA{r,:});
end
您可以使用
eval
for ii = 1:size(DATA,1)
eval( [DATA{ii,1}, ' = ', num2str( DATA{ii,2} )] );
end
但是,不允许使用eval
您可以改为使用动态字段名:
s = cell2struct( DATA(:,2), DATA(:,1), 2 );
您可以使用
eval
for ii = 1:size(DATA,1)
eval( [DATA{ii,1}, ' = ', num2str( DATA{ii,2} )] );
end
但是,不允许使用eval
您可以改为使用动态字段名:
s = cell2struct( DATA(:,2), DATA(:,1), 2 );
这在函数中不起作用。更糟糕的是,它会产生意想不到的结果:变量将在
'base'
中分配,而不是在函数的上下文中分配:O@Shai不间断电源!你说得对。我误解了base
和caller
,我认为caller
在堆栈中处于较低的一级,并以当前范围为基础。这在函数中不起作用。更糟糕的是,它会产生意想不到的结果:变量将在'base'
中分配,而不是在函数的上下文中分配:O@Shai不间断电源!你说得对。我误解了base
和caller
,我认为caller
是堆栈中的一级,并以当前范围为基础。这不包括变量不是向量的情况,例如ND矩阵(甚至2D矩阵)、单元格数组、结构,etc@carandraug你是对的。我使用了num2str
而不是我个人最喜欢的sprintf
来覆盖简单的向量。但是eval
在这里确实有局限性。可能与disp
结合使用?我更喜欢使用动态名称的结构…这不包括变量不是向量的情况,例如ND矩阵(甚至2D矩阵)、单元格数组、结构、,etc@carandraug你是对的。我使用了num2str
而不是我个人最喜欢的sprintf
来覆盖简单的向量。但是eval
在这里确实有局限性。可能与disp
结合使用?我更喜欢动态名称的结构。。。