避免使用for循环

时间:2015-05-30 07:15:34

标签: matlab loops matrix

我想获得一些如何避免使用for循环的帮助。我已经看过几个类似的问题但是却无法找到符合我需求的东西。目前我使用循环,它非常笨重和凌乱。以下是数据的结构和我想要实现的目标:

我必须对来自变量mean_data 1080 时间点的数据进行索引,这是 1080x1 的两倍。有些时间点属于我感兴趣的特定任务条件和特定事件。有3个条件( cond1,cond2,cond3 )和4个任务事件( event1,event2,event3, EVENT4 )。此信息来自变量params。特别是params的第8列具有条件信息(1,2,3分别表示cond1,cond2,con3)。可以从params中的第11列获取事件信息。以下是我可以用循环做的事情:

for c=1:size(params,1)
        if params(c,8)==1
            cond1_event1(end+1,1)=mean([data(params(c,11)+3,1),data(params(c,11)+4,1)]);
            cond1_event2(end+1,1)=mean([data(params(c,11)+6,1),data(params(c,11)+7,1)]);
            cond1_event3(end+1,1)=mean([data(params(c,11)+8,1),data(params(c,11)+9,1)]);
            cond1_event4(end+1,1)=mean([data(params(c,11)+10,1),data(params(c,11)+11,1)]);

        elseif params(c,8)==2
            cond2_event1(end+1,1)=mean([data(params(c,11)+3,1),data(params(c,11)+4+1,1)]);
            etc.

        elseif params(c,8)==3
            cond3_event1(end+1,1)=mean([data(params(c,11)+3,1),data(params(c,11)+4,1)]);
            etc.
        end
    end

循环使它清晰,但它太长了。有没有人有任何建议如何使这更优雅?输出应该产生 12个变量(3个条件x 4个事件)。每个变量都是nx1 double。谢谢。

1 个答案:

答案 0 :(得分:0)

您可以简单地使用逻辑索引,然后使用垂直连接。

idx = params(c, 8) == 1;
cond1_event1 = [cond1_event1; mean(...)];

然后重复其他条件,或使用循环(1:3)。