【问题标题】:collect and increment cell array from loop matlab从循环 matlab 收集和增加单元格数组
【发布时间】:2013-12-23 01:10:20
【问题描述】:

我对 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 });

【问题讨论】:

    标签: arrays matlab loops cell


    【解决方案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'
    

    【讨论】:

    • 非常感谢!我知道这会很简单。哦,作为新手的乐趣。
    • 非常感谢!我知道这会很简单。哦,作为新手的乐趣。虽然您解释的内容非常适合我的输出,但还有一个想法我想尝试做。正如最后解释的那样,我希望能够以 { Content }、{ Content} 等结束。所以当我将 curSet 插入需要它的函数中时,它会创建那些。有什么建议么?以“{”的形式添加相关元素会起作用吗?
    • @Bastien 对不起,我不明白你的意思。你的意思是添加最后一行?具体是什么内容?
    • 对不起,我可能不是很清楚。如果您查看我的原始帖子,我基本上是在编写此循环以生成一系列行,这些行在我用来将一系列数据集加载到我的分析软件中的函数中需要数组(我们用它创建的每个集合一个循环)如果我要逐个手动编写集合,我最终会得到类似的结果:doSomething(A, 'command',{... {'index 1 'load' path/file 'subject' 505 'condition' HiLabel}, {'index 2 'load' path/file 'subject' 505 'condition' LoLabel} etc });
    • 不用担心,我想我是因为没有使循环的输出与函数中需要的内容兼容而造成了问题。无论如何,你的帮助很棒!
    【解决方案2】:

    /edit 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 
    

    【讨论】:

    • 感谢您的超快速回复。我喜欢这个想法,而且我实际上学到了一些我不知道的东西。可悲的是,我担心我无法保留我最初计划中的一些字符串。该输出是否会像上面的实现那样给我一个列表?它返回的结果显然是一个结构,我以后可能很难将其插入我的函数中。告诉我,我很想学习这些东西。干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 2014-03-02
    相关资源
    最近更新 更多