Matlab 避免使用for循环
我想得到一些关于如何避免使用for循环的帮助。我看到过几个类似的问题,但无法找到适合我需求的具体问题。目前我使用循环,它非常庞大和混乱。以下是数据结构以及我希望实现的目标: 我必须索引来自1080时间点的数据,这些时间点来自变量Matlab 避免使用for循环,matlab,loops,matrix,Matlab,Loops,Matrix,我想得到一些关于如何避免使用for循环的帮助。我看到过几个类似的问题,但无法找到适合我需求的具体问题。目前我使用循环,它非常庞大和混乱。以下是数据结构以及我希望实现的目标: 我必须索引来自1080时间点的数据,这些时间点来自变量mean_data,它是1080x1双精度数据。一些时间点属于我感兴趣的特定任务条件和特定事件。有3个条件(cond1、cond2、cond3)和4个任务事件(event1、event2、event3、event4)。此信息来自变量params。特别是params的第8列
mean_data
,它是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双精度。谢谢。您可以简单地使用逻辑索引,然后使用垂直连接
idx = params(c, 8) == 1;
cond1_event1 = [cond1_event1; mean(...)];
然后重复其他条件,或使用循环(1:3) 执行时间是多少?