如何保留一维数组的单调递增值

how to retain monotonically increasing values of a one dimensional array

假设我有一个矩阵,

x=[1,2,3,5,4,6,6,7,4,2,3,4,5,6,10,12,4,5,43,23,45,34,54,78];

现在,我想创建一个新矩阵,我想在其中知道其值高于(不等于但严格大于)所有先前元素的元素的索引和值。

所以,我要找的数组是,

y=[1,2,3,5,6,7,10,12,43,45,54,78];

因为其他数字只是噪声,向量 x 中与这些值对应的索引也是如此。

还有一点是我想避免遍历数组,因为我的实际数据很大。

如何使用 cummax 来计算 运行 最大值:

cm = cummax(x);
ind = [1,find(x(2:end) > cm(1:end-1))+1];
y = x(ind);

采用 Divakar 的方法(如果需要,直到 Divakar 发布它):

ind = find([true diff(cummax(x))>0]);
y = x(ind);