Как эффективно найти точки корреляции и отбросить за пределами диапазона 3 сигм в MATLAB?
-
19-09-2019 - |
Вопрос
У меня есть файл данных m.txt
это выглядит примерно так (с гораздо большим количеством точек):
286.842995
3.444398
3.707202
338.227797
3.597597
283.740414
3.514729
3.512116
3.744235
3.365461
3.384880
Некоторые значения (например, 338.227797
) являются Очень разные от значений, которые я обычно ожидаю (меньшие числа).
Итак, я думаю, что удалю все точки, которые лежат за пределами
3-sigma range
.Как я могу это сделать в MATLAB?Кроме того, большая проблема заключается в том, что у этого файла есть отдельный файл.
t.txt
связанный с ним, который хранит соответствующие значения времени для этих чисел.Итак, мне придется удалить соответствующие значения времени изt.txt
файл также.
Я все еще изучаю MATLAB и знаю, что есть хороший способ сделать это (лучше, чем хранить индексы элементов, которые были удалены из m.txt
а затем удалив эти элементы из t.txt
файл)
Решение
@Amro близок, но НАЙТИ не требуется (поиск логического индекса), и вам нужно включить среднее значение для истинного диапазона +/-3 сигмы.Я бы пошел со следующим:
%# load files
m = load('m.txt');
t = load('t.txt');
%# find values within range
z = 3;
meanM = mean(m);
sigmaM = std(m);
I = abs(m - meanM) <= z * sigmaM;
%# keep values within range
m = m(I);
t = t(I);
Другие советы
%# load files
m = load('m.txt');
t = load('t.txt');
%# find outliers indices
z = 3;
idx = find( abs(m-mean(m)) > z*std(m) );
%# remove them from both data and time values
m(idx) = [];
t(idx) = [];