在连续运行序列的向量中查找第一个值

Ale*_*lex 0 matlab

给出一个矢量

[1;2;3;5;6;7;10;11;12]
Run Code Online (Sandbox Code Playgroud)

这是transpose(1:N)某些有序子集N,如何在每个运行序列中找到第一个值?这里,运行序列是由1分隔的整数序列,例如5;6;7.从上面的矢量我希望答案是:

[1;5;10]
Run Code Online (Sandbox Code Playgroud)

Ste*_*fin 5

您可以使用逻辑索引.

a = [1;2;3;5;6;7;10;11;12]
a([true; diff(a)>1])        %% or a(diff([-inf; a])>1)
ans =

     1
     5
    10
Run Code Online (Sandbox Code Playgroud)

diff(a)会给你所有元素之间的区别.diff(a)>1将返回一个逻辑向量,指示哪个数字的差异大于1.

[true; diff(a)>1] 将在开始时附加单个逻辑true,以确保包含第一个值.

最后a([true; diff(a)>1])将给出a由逻辑向量映射的值.