从变量创建矢量范围

时间:2014-09-23 19:17:06

标签: matlab

我有两个矢量来保持"开始"和"结束"我希望组合起来的位置(作为逻辑)来创建第三个向量Final

Starts = [0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0];
Ends =   [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0];

最终矢量看起来像这样:

Final =  [0 0 0 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0];

目前,我可以使用for循环完成此操作,如下所示:

Start_Locations = find(Starts);
End_Locations = find(Ends);
Final = zeros(20,1);

for x=1:length(Start_Locations)

    Final(Start_Locations(x):End_Locations(x),1) = 1;

end

我想知道是否有办法在没有for循环的情况下完成同样的事情。例如,我可以通过以下"硬编码"完成我在上面概述的内容。语句:

Final([4:8,11:19],1) = 1;

具体来说,是否有办法将Start_LocationsEnd_Locations向量组合起来,以便我可以使用以下单个语句:

Final(Combined_Start_and_End_Locations,1) = 1;

完成我上面的for循环所做的事情?我试图尽可能地学习避免for循环,并且非常感谢任何创建Final向量的解决方案,如上所述,而不需要求助于循环。

1 个答案:

答案 0 :(得分:7)

这样的问题通常可以使用diffcumsum来解决。它们本质上是离散的导数和积分函数。

对于你的问题,我相信

Final = cumsum([Starts 0]-[0 Ends]);
Final = Final(1:end-1);

达到了预期的效果。