String 如何从变量名数组中创建MATLAB中的idendial变量?

String 如何从变量名数组中创建MATLAB中的idendial变量?,string,matlab,for-loop,indexing,String,Matlab,For Loop,Indexing,我在Matlab中有以下代码: a = zeros(23,1) b = zeros(23,1) c = zeros(23,1) 我怎样才能写得更简洁呢?我一直在寻找这样的解决方案: str = {'a','b','c'} for i = str{i} i = zeros(23,1) end 但是我找不到一种没有错误信息的方法来正确地执行它。有人能帮忙吗?这里有一个简洁的方法,使用: 以下是一种简洁的方法: 你想做的是非常糟糕的练习,但可以这样做 str = {'a','b','c'}

我在Matlab中有以下代码:

a = zeros(23,1)
b = zeros(23,1)
c = zeros(23,1)
我怎样才能写得更简洁呢?我一直在寻找这样的解决方案:

str = {'a','b','c'}
for i = str{i}
    i = zeros(23,1)
end

但是我找不到一种没有错误信息的方法来正确地执行它。有人能帮忙吗?

这里有一个简洁的方法,使用:


以下是一种简洁的方法:

你想做的是非常糟糕的练习,但可以这样做

str = {'a','b','c'};
for ii = 1:numel(str)
    eval( [str{ii} ' = zeros(23,1)'] );
end
为什么这是一个坏习惯

您的代码易读性刚刚下降,您无法清楚地看到变量声明的位置。 评估 您可以使用deal使事情变得更好,但这不使用变量名数组

[a, b, c] = deal( zeros(23, 1) );
更好的是,您可以通过使用矩阵或表格而不是单独的1D数组来优化代码。table选项意味着您仍然可以使用变量名数组,但您不能对任何内容使用eval

% Matrix
M = zeros( 23, 3 ); % Index each column as a/b/c using M(:,1) etc

% Table, index using T.a, T.b, T.c
T = array2table( zeros(23,3), 'VariableNames', {'a','b','c'} );     
你想做的是非常糟糕的练习,但可以这样做

str = {'a','b','c'};
for ii = 1:numel(str)
    eval( [str{ii} ' = zeros(23,1)'] );
end
为什么这是一个坏习惯

您的代码易读性刚刚下降,您无法清楚地看到变量声明的位置。 评估 您可以使用deal使事情变得更好,但这不使用变量名数组

[a, b, c] = deal( zeros(23, 1) );
更好的是,您可以通过使用矩阵或表格而不是单独的1D数组来优化代码。table选项意味着您仍然可以使用变量名数组,但您不能对任何内容使用eval

% Matrix
M = zeros( 23, 3 ); % Index each column as a/b/c using M(:,1) etc

% Table, index using T.a, T.b, T.c
T = array2table( zeros(23,3), 'VariableNames', {'a','b','c'} );     
如果变量名很重要,也可以使用结构:

str={'a','b','c'}; 数据=结构 对于ii=1:numelstr data.str{ii}=zeros23,1; 终止 结构比表更有效。您现在可以处理data.a、data.b等

但如果名称没有用处,最好将数据放入单元格数组:

N=3; 数据=cellN,1; 对于ii=1:N 数据{ii}=零23,1; 终止 或者简单地说:

数据=单元格3,1; [数据{:}]=dealzeros23,1; 现在,您可以将数组作为数据{1}、数据{2}等进行寻址,并且它们总是很容易在循环中寻址。

如果变量名很重要,也可以使用结构:

str={'a','b','c'}; 数据=结构 对于ii=1:numelstr data.str{ii}=zeros23,1; 终止 结构比表更有效。您现在可以处理data.a、data.b等

但如果名称没有用处,最好将数据放入单元格数组:

N=3; 数据=cellN,1; 对于ii=1:N 数据{ii}=零23,1; 终止 或者简单地说:

数据=单元格3,1; [数据{:}]=dealzeros23,1;
现在,您可以将数组作为数据{1}、数据{2}等进行寻址,它们总是很容易在循环中寻址。

第一个很好,无需更改。你也可以总是做d=zeros23,3,然后索引第二个维度。第一个维度很好,不需要更改。您也可以始终执行d=zeros23,3并为每个第二维度编制索引。结构不一定比表更高效。。。这取决于你在做什么doing@Wolfie:当然可以。但是,如果A是结构体,则A.field的速度明显快于表。表是一个用户类,因此对它进行索引会运行一些M文件代码。结构是一种内置类型。这里的某个地方有一个问答,这两个都是定时的。结构不一定比表更有效。。。这取决于你在做什么doing@Wolfie:当然可以。但是,如果A是结构体,则A.field的速度明显快于表。表是一个用户类,因此对它进行索引会运行一些M文件代码。结构是一种内置类型。在这里的某个地方有一个问答,这两个都是定时的。