String 如何从变量名数组中创建MATLAB中的idendial变量?
我在Matlab中有以下代码: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'}
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文件代码。结构是一种内置类型。在这里的某个地方有一个问答,这两个都是定时的。