MATLAB, исключая данные за пределами 1 стандартного отклонения - PullRequest
3 голосов
/ 20 сентября 2009

Я неопытный с MATLAB, извините за вопрос новичка:

У меня большой вектор (905350 элементов), в котором хранится целый набор данных. У меня есть стандартное отклонение и среднее значение, и теперь я хочу вырезать все точки данных, которые выше / ниже одного стандартного отклонения от среднего значения. Я просто понятия не имею, как. Из того, что я понял, я должен сделать какую-то двойную петлю?

Это как: mean-std <данные, которые я хочу <mean + std </p>

Ответы [ 4 ]

6 голосов
/ 20 сентября 2009

Вы можете просто использовать Поэлементное логическое И :

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 );
6 голосов
/ 20 сентября 2009

Если данные находятся в переменной A, со средним значением, сохраненным в meanA, и стандартным отклонением, сохраненным в stdA, то следующее извлечет данные, которые вы хотите, сохраняя при этом исходный порядок значений данных:

B = A((A > meanA-stdA) & (A < meanA+stdA));

Вот несколько полезных ссылок на документацию, которые касаются понятий, использованных выше: логические операторы , индексирование матрицы .

0 голосов
/ 20 сентября 2009
y = x(x > mean-std);
y = y(y < mean+std);

должно работать. См. НАЙТИ для более подробной информации. Команда FIND неявно используется в приведенном выше коде.

0 голосов
/ 20 сентября 2009

Принимая A в качестве исходного вектора, а B в качестве последнего:

B = sort(A)
B = B(find(B > mean-std,1,'first'):find(B < mean+std,1,'last'))
...