How to remove outliers from 2D array
Ältere Kommentare anzeigen
I have been trying to solve a simple problem for a while now and can't seem to succeed other than brute force method.
I have a 2D array. I want to do statistics on it (i.e., compute mean and std dev). However, there are occassionally invalid values in the array (say below threshold1 and above threshold2). I'd like to either replace those values with null's which will make mean and std ignore them or some other method to ignore them.
For instance, consider: a = reshape(rand(100,1),25,4); a(a>0.9) = 10; a(a<0.1) = -10;
I would like to then compute things like: b = mean(a,2);
but exclude the elements > 1 and < 0 in the computation. If I could exclude them, then elements of b would be averages of 0 to 4 numbers.
Using things like: a(a<0.1) = [];
doesn't work because it turns the 2D array into 1D which can't be reshaped back to original format.
Akzeptierte Antwort
Weitere Antworten (3)
Andrei Bobrov
am 25 Jul. 2013
l1 = a <= 1 & a >= 0;
n = sum(l1,2)./n;
mn = sum(a.*l1,2)./n;
sd = sqrt(sum((bsxfun(@minus,a,mn).*l1).^2,2)./n);
OR, if you have Statistics Toolbox
a1 = a;
a1(~l1) = nan;
mn2 = nanmean(a1,2);
sd2 = nanstd(a1,1,2);
Varoujan
am 25 Jul. 2013
Maziyar
am 28 Jul. 2015
0 Stimmen
I think it would be better if you replace outliers with the mean value of the matrix. This is more accurate from statistical point of view than ignoring outliers. However it might increase the running time.
for i = 1 : numel(Matrix) if Matrix(i) > mean2(Matrix) Mask(i) = mean2(Matrix) ; end end
Kategorien
Mehr zu Descriptive Statistics finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!