从循环matlab收集和增加单元格数组

时间:2013-12-23 01:10:21

标签: arrays matlab loops cell

我是matlab的新手但是经过几个小时试图找到解决问题的方法后,似乎我必须直接询问,因为我找不到任何直接帮助

我要做的是构建一个包含各种变量的单元数组,我必须循环。在那一刻,我已经设法很好地创建了这个单元格数组,但循环覆盖了结果。我正在尝试寻找保存输出的方法并且已经管理但仅使用不涉及单元格数组的示例:(

这是代码(原谅我看起来真的很糟糕):

subject = {'505','506'}
pathname_read  = 'a path';
nsubj = length(subject);
curIndex=0;
for s=1:nsubj
Cond={'HiLabel','LowLabel'};
ncond=length(Cond); 
    for e=1:ncond;
     curIndex=curIndex+1
     line=line+1
     curCond=Cond{e};
     curFile=[pathname_read subject{s} '_' Cond{e} '.set'];
     curSubject=subject{s};
     curSet={'index' curIndex 'load' curFile 'subject' curSubject 'condition' curCond};
    end
end

curSet是构建的单元格数组。我已经看到了从像curSet(e)这样的循环中提取的方法,但是在这里它不起作用。

最终我想要的结果是这样的:

curSet=
{'index 1 'load' path/file 'subject' 505 'condition' HiLabel};
{'index 2 'load' path/file 'subject' 505 'condition' LoLabel};
{'index 3 'load' path/file 'subject' 506 'condition' HiLabel};
{'index 4 'load' path/file 'subject' 506 'condition' LoLabel};

我也想找到一种方法来获得;在每一行之后。我想它一旦收集完就可以成为一种字符串,因为它会“粘贴到一个看起来像这样的函数”

doSomething(A, 'command',{ My generated curSet });

2 个答案:

答案 0 :(得分:1)

更改行

curSet = {'index' curIndex 'load' curFile 'subject' curSubject 'condition' curCond};

curSet(curIndex,:) = {'index' curIndex 'load' curFile 'subject' curSubject 'condition' curCond};

这样你就可以在每次迭代时添加一行,而不是覆盖。最终结果是

>> curSet
curSet = 
    'index'    [1]    'load'    [1x21 char]    'subject'    '505'    'condition'    'HiLabel' 
    'index'    [2]    'load'    [1x22 char]    'subject'    '505'    'condition'    'LowLabel'
    'index'    [3]    'load'    [1x21 char]    'subject'    '506'    'condition'    'HiLabel' 
    'index'    [4]    'load'    [1x22 char]    'subject'    '506'    'condition'    'LowLabel'

答案 1 :(得分:0)

/编辑Luis建议创建单元格数组更好,删除了我的代码。

结构将更好地匹配您正在创建的数据结构。代码看起来像:

subject = {'505','506'};
pathname_read  = 'a path';
nsubj = length(subject);
curIndex=0;
line=0;
curSet=[];
for s=1:nsubj
    Cond={'HiLabel','LowLabel'};
    ncond=length(Cond);
    for e=1:ncond;
        curIndex=curIndex+1;
        line=line+1;
        cr.index=curIndex;
        cr.load=[pathname_read subject{s} '_' Cond{e} '.set'];
        cr.subject=subject{s};
        cr.condition=Cond{e};
        curSet=[curSet cr];
    end
end