gpt4 book ai didi

matlab - 从变量创建向量范围

转载 作者:太空宇宙 更新时间:2023-11-03 19:34:11 24 4
gpt4 key购买 nike

我有两个向量,它们包含“开始”和“结束”位置(作为逻辑),我希望将它们组合起来以创建第三个向量,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 向量而不诉诸循环的解决方案。

最佳答案

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

对于你的问题我相信

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

达到预期的结果。

关于matlab - 从变量创建向量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26002997/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com