检查整数序列以查看它是否为非递减

Fix*_*int 1 matlab vector

我有一个向量,一个由MATLAB中的整数组成的非常长的向量.我的问题是什么是一种快速有效的方法来检查在MATLAB中该向量是否不减少?向量有几千个元素,都是正整数.向量以一些正整数开始,重复几十次,然后应该递增1并重复.例如,矢量应该看起来像

a = [5 5 5 5 6 6 6 6 6 6 6 7 7 8 8 9 9 9 10 10 10 10 11];
Run Code Online (Sandbox Code Playgroud)

问题是,我们怀疑计数器可能偶尔搞砸了,所以计数器偶尔减少然后增加,就像这样

b = [5 5 5 5 6 6 6 7 7 6 6 7 7 8 8 9 9 9 10 11 10 10 11];
Run Code Online (Sandbox Code Playgroud)

所以首先我需要看看序列是否不减少.然后,如果它确实减少了,那么知道序列减少的所有索引会更好.我只能想到使用第一个差异并检查所有条目是零还是一个.还有其他聪明的想法吗?

谢谢.

小智 6

要检查序列是否为非递减,您可以使用以下之一:

all(diff(b) >= 0)
~any(diff(b) < 0)
Run Code Online (Sandbox Code Playgroud)

要找到它减少的具体位置:

find(diff(b) < 0) + 1 
Run Code Online (Sandbox Code Playgroud)


bla*_*bla 5

使用diffany:

 any(diff(b)<0)
Run Code Online (Sandbox Code Playgroud)

如果序列正在减少则返回true(1),如果非减少则返回false(0).