MATLAB:如何在另一个变量名中使用变量值?

时间:2010-07-27 17:24:08

标签: matlab variables loops naming-conventions

我想知道这是否可行。我的代码如下所示:

indexStop = find(firstinSeq(x,4) ~= ...
                 littledataPassed(y:length(littledataPassed),4), 1, 'first');
for z= 0:(n-1)
   indexProcess = find((littledataPassed(y:y+indexStop-1,6) == 1 & ... 
      littledataPassed(y:y+indexStop-1,2) == firstinSeq(x,2) & ... 
      littledataPassed(y:y+indexStop-1,5) == z), 1, 'first'); 
   if isempty(indexProcess)
      msgLength[n](countmsgLength[n],:)= [firstinSeq(x,:) [0 0 0 0 0 0]];
   else
      msgLength[n](countmsgLength[n],:)= [firstinSeq(x,:) ...
         littledataPassed(y+indexProcess-1,:)];
   end
   countmsgLength[n]= countmsgLength[n] + 1;
end

我希望将所有读取[n]的内容切换为n的实际值,这样我就可以使用它将数据添加到msgLength#格式的九个不同变量中。我尝试过搜索教程,但没有看到任何关于这个主题的内容。

2 个答案:

答案 0 :(得分:8)

使用数组或cell arrays来存储数据几乎总是比创建一堆名为a1a2a3等的变量更好。例如,您可以将msgLength初始化为包含n元素的单元格数组:

msgLength = cell(1,n);

您可以使用花括号访问msgLength的单元格:

msgLength{n} = ...  %# Assign something to cell n

您的变量countmsgLength只能是常规数字数组,因为它似乎只存储n个值。您只需将方括号更改为括号(即[n](n))。


但是,如果确实想要创建n个单独的变量,您可能最终会使用EVAL函数。 This questionthis question显示了一些如何使用另一个变量的值创建变量名称的示例。

答案 1 :(得分:0)

如果你绝对必须使用多个变量,那么使用()表示法构造dynamic fieldnames会很方便。如果输入以下内容:

>> n = 1;
>> data.(sprintf('msgLength%u', n)) = [1 2 3 4];
>> n = 2;
>> data.(sprintf('msgLength%u', n)) = [5 6 7 8];

你将获得一个包含两个字段的结构:

>> data
data = 
   msgLength1: [1 2 3 4]
   msgLength2: [5 6 7 8]

尽管如此,我还是第二个gnovice建议使用数组来存储数据而不是几个变量。您可以简单地向msgLength添加另一个维度,因此第7行变为:

msgLength(n,countmsgLength(n),:)= [firstinSeq(x,:) [0 0 0 0 0 0]];