我有一个向量,一个由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)
使用diff和any:
any(diff(b)<0)
Run Code Online (Sandbox Code Playgroud)
如果序列正在减少则返回true(1),如果非减少则返回false(0).