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

时间:2015-04-25 00:15:25

标签: arrays matlab vectorization

假设我有一个矩阵,

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中与这些值对应的索引。

还有一点是我想避免在数组上循环,因为我的实际数据很大。

1 个答案:

答案 0 :(得分:2)

如何使用cummax计算正在运行的max:

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);