replacing element which are <= previous element with NaN

2 次查看(过去 30 天)
Hi,
I have a vector x = [1 2 3 4 3 2 3 4 6 8 5 5 6 8.5 9 11 12 ]; I want to replace any element which are less than or equal to previous number with NaN.
Want = [1 2 3 4 NaN NaN NaN NaN 6 8 NaN NaN NaN 8.5 9 11 12 ];
My current code gave Want = [1 2 3 4 NaN NaN NaN NaN 6 8 5 5 6 8.5 9 11 12 ]; the code didn't work for later part. Could anyone please advise? Thanks in advance!
n = 1; i =1; j=2;
while i < m-1 & j < m
if x(j) > x(i)
want(n) = x(j);
n=n+1;
i=i+1;
j=j+1;
elseif x(j) <= x(i)
want(n) = NaN;
n=n+1;
i=i;
j=j+1;
end
end

采纳的回答

Rik
Rik 2020-6-3
编辑:Rik 2020-6-3
This code may not be efficient for very large vectors.
x = [1 2 3 4 3 2 3 4 6 8 5 5 6 8.5 9 11 12 ];
y=movmax(x,[numel(x) 0]);
y([false diff(y)<=0])=NaN;
You can also use a for-loop, since you know the number of iterations beforehand:
x = [1 2 3 4 3 2 3 4 6 8 5 5 6 8.5 9 11 12 ];
current_max=x(1);
for n=2:numel(x)
if x(n)<=current_max
x(n)=NaN;
else
current_max=x(n);
end
end
disp(x)

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 NaNs 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by