2 views (last 30 days)

Hello

I have a matrix of 4 columns. I would like to compare each element in 4th column with previous and next element in the same column. If the difference is more than 50, the elemnt should turn to 0. (This is to eliminate unexpectedly high or low values inside 4th column. Other columns should not change at all)

My written code does not work, so I will be glad if some one can help in this. I expect the result look like this:

A = [15 2 7 36

20 3 14 41

25 4 21 0

30 5 28 22]

A = [15 2 7 36

20 3 14 41

25 4 21 567

30 5 28 22]

M = length (A(:,4)),

i = A(1,4) %first element of the column

k = A(M,4) %last element of the column

for T = 2:M-1

idx = A(T,4)

if idx> 'A(T+1,4)'+200

A(idx,4) = 0;

if idx < 'A(T-1,4)'-200

A(idx,4) = 0;

end

end

fname = sprintf('new.csv');

csvwrite (fname,A); % Write to CSV file

end

James Tursa
on 30 Apr 2020

Is this what you want?

for T = 2:M

if( abs(A(T,4) - A(T-1,4)) > 50 )

A(T,4) = 0;

end

end

James Tursa
on 30 Apr 2020

Guillaume
on 30 Apr 2020

Rather than coming up with your own code, I'd recommend using the filloutliers method. It doesn't have a detection method for 'more than 50 away from the two nearest neighbours' but the many detections methods are probably a lot more robust than this anyway.

A(:, 4) = filloutliers(A(:, 4), 0); %replace outliers by 0

It also has better fill methods than replacing outliers by 0.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.