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

时间:2013-12-24 07:25:32

标签: 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];

问题在于我们怀疑计数器可能偶尔会搞砸,所以计数器会在一段时间内减少然后增加,例如

b = [5 5 5 5 6 6 6 7 7 6 6 7 7 8 8 9 9 9 10 11 10 10 11];

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

感谢。

2 个答案:

答案 0 :(得分:6)

要检查序列是否不减少,您可以使用以下之一:

all(diff(b) >= 0)
~any(diff(b) < 0)

找到减少的具体位置:

find(diff(b) < 0) + 1 

答案 1 :(得分:5)

使用diffany

 any(diff(b)<0)

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