从变量创建矢量范围

Ala*_*rik 6 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];
Run Code Online (Sandbox Code Playgroud)

最终矢量看起来像这样:

Final =  [0 0 0 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0];
Run Code Online (Sandbox Code Playgroud)

目前,我可以使用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
Run Code Online (Sandbox Code Playgroud)

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

Final([4:8,11:19],1) = 1;
Run Code Online (Sandbox Code Playgroud)

具体来说,有没有办法以一种方式组合Start_LocationsEnd_Locations向量,以便我可以有一个单一的语句,如:

Final(Combined_Start_and_End_Locations,1) = 1;
Run Code Online (Sandbox Code Playgroud)

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

Tro*_*dor 7

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

对于你的问题我相信

Final = cumsum([Starts 0]-[0 Ends]);
Final = Final(1:end-1);
Run Code Online (Sandbox Code Playgroud)

达到了预期的效果.