Как эффективно найти точки корреляции и отбросить за пределами диапазона 3 сигм в MATLAB?

StackOverflow https://stackoverflow.com/questions/1728709

  •  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) = [];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top