Как фильтровать данные в пределах определенного порога в Matlab? - PullRequest
0 голосов
/ 09 октября 2019

Я хочу удалить данные выше и ниже красной линии на рисунке ниже, что означает удаление данных выше 1,2 и ниже -1,2. Figure

Я использую следующую функцию:

threshold = [-1.2, 1.2];
y = rmoutliers(y,'percentiles',threshold);

Но произошла ошибка:

Ошибка при использовании isoutlier> parseinput (строка236) Значение 'Percentiles' должно представлять собой отсортированный 2-элементный числовой вектор с записями от 0 до 100.

Какие-либо другие функции, которые можно использовать для решения проблемы?

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Если вы хотите оставить переменную оси x без изменений (т. Е. Количество элементов должно оставаться неизменным), было бы неплохо преобразовать выбросы в NaN.

y( abs(y)>1.2 ) = NaN;
* 1005. * Если вы хотите удалить элементы, вы можете использовать [] вместо NaN.
y( abs(y)>1.2 ) = [];

Это условие abs(y)>1.2 проверяет абсолютное (положительное) значение, большее 1.2, есливаши пороги были другими, тогда вы могли бы проверить их отдельно

y( y > 1.2 | y < -1.2 ) = NaN;
1 голос
/ 09 октября 2019

Извлекать их просто. Предполагая, что вам нужно затем удалить точки из данных по осям x и y,

idx_to_remove = ((y<-1.2)|(y>1.2));
x(idx_to_remove) = [];
y(idx_to_remove) = [];

Но нужно ли вам удалять их или вместо этого насыщать их до соответствующего предела? Для насыщенности x не изменится, но вы бы сделали следующее для y,

y(y < -1.2) = -1.2;
y(y > 1.2) = 1.2;
...