具有两个循环的表中的变量替换

时间:2014-03-30 17:50:33

标签: matlab loops indexing

我希望在循环中更改变量名称。名称写在一些单元格数组中,如下所示:

http://imgur.com/szqGzkH

ML.species1{1:end,end+1}=0;
i=1:height(ML.species1);
        ML.species1{i,end}=(ML.species1.someindex(i)*3+(ML.species1.someotherindex(i)
end

我无法调用变量的名称并说ML.(ML.speciesname{1,1}){i,end}= ...为什么不呢?

如果这应该有效,我想在基本计算周围进行第二次循环,只需通过将我的索引ML.speciesname{1,j}移动到列名2,3来逐个交换变量j。 ..这有什么作用?

2 个答案:

答案 0 :(得分:2)

您可能会发现eval函数对于使用字符串定义变量名称和值很有用。例如,如果您有一个名称,您希望在strVarName(一个字符串)中给出一个变量,并在dValue(一个双精度)中给它一个值,您可以写:

eval([strVarName ' = ' num2str(dValue) ';']);
eval

Documentation

答案 1 :(得分:2)

仍然没有100%确定你想要做什么 - 但我相信以下内容应该有所帮助:

您可以通过不同方式访问结构中的元素:

ML.element1='hello world';
fieldName = 'element1';
disp(getfield(ML, fieldName));

正如您所看到的,使用getfield即使我在编写代码时不知道元素的名称,我也可以访问元素(只要我在变量)。

同样,您可以使用setfield创建元素:

setfield(ML, fieldName, 'goodbye world');
disp(ML.element1);

更新 - 如果您想索引特定(可变)字段名称的元素,您可以执行以下操作:

fieldname = 'one';
ML.(fieldname) = [123 234];
ML.(fieldname)(3) = 456;
disp(ML)

ML = 

  one: [123 234 456]

注意 - 诀窍在于()括号内的(变量)名称周围。