我有一个向量,一个由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];
所以首先我需要看看序列是否不减少。然后,如果它确实减少了,那么知道序列减少的所有索引会更好。我只能想到使用第一个差异并检查所有条目是零还是一个。还有其他聪明的想法吗?
感谢。
答案 0 :(得分:6)
要检查序列是否不减少,您可以使用以下之一:
all(diff(b) >= 0)
~any(diff(b) < 0)
找到减少的具体位置:
find(diff(b) < 0) + 1
答案 1 :(得分:5)
使用diff
和any
:
any(diff(b)<0)
如果序列正在减少则返回true(1),对于非减少则返回false(0)。