我想获得一些如何避免使用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
。谢谢。
答案 0 :(得分:0)
您可以简单地使用逻辑索引,然后使用垂直连接。
idx = params(c, 8) == 1;
cond1_event1 = [cond1_event1; mean(...)];
然后重复其他条件,或使用循环(1:3)。