MATLAB, исключающий данные за пределами 1 стандартного отклонения

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

  •  11-09-2019
  •  | 
  •  

Вопрос

У меня нет опыта работы с 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 используется неявно в приведенном выше коде.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top