MATLAB, исключающий данные за пределами 1 стандартного отклонения
Вопрос
У меня нет опыта работы с MATLAB, так что извините за вопрос новичка:
У меня есть большой вектор (905350 элементов), хранящий в себе целую кучу данных.У меня есть стандартное отклонение и среднее значение, и теперь я хочу вырезать все точки данных, которые выше / ниже одного стандартного отклонения от среднего.Я просто понятия не имею, как это сделать.Из того, что я понял, я должен сделать какой-то двойной цикл?
Это как:среднее значение-ЗППП < данные, которые мне нужны < среднее значение + ЗППП
Решение
Если данные находятся в переменной A
, со средним значением , сохраненным в meanA
и стандартное отклонение, сохраненное в stdA
, затем следующим образом будут извлечены нужные вам данные при сохранении исходного порядка значений данных:
B = A((A > meanA-stdA) & (A < meanA+stdA));
Вот несколько полезных ссылок на документацию, которые касаются концепций, использованных выше: логические операторы, матричное индексирование.
Другие советы
Вы можете просто использовать Элементарно логичный И:
m = mean(A);
sd = std(A);
B = A( A>m-sd & A<m+sd );
Кроме того, зная, что: |x|<c iff -c<x<c
, вы можете объединить оба в один, как:
B = A( abs(A-m)<sd );
Принимая A в качестве исходного вектора, а B в качестве конечного:
B = sort(A)
B = B(find(B > mean-std,1,'first'):find(B < mean+std,1,'last'))
y = x(x > mean-std);
y = y(y < mean+std);
должно сработать.Видишь Найти для получения более подробной информации.Команда FIND используется неявно в приведенном выше коде.