MATLAB exclusión de los datos fuera de 1 desviación estándar
Pregunta
Estoy sin experiencia con MATLAB, lo siento por la pregunta de novato:
Tengo un vector grande (905350 elementos) almacenar un montón de datos en ella. Tengo la desviación estándar y decir, y ahora quiero cortar todos los puntos de datos que están por encima / debajo de una desviación estándar de la media. Sólo tengo ni idea de cómo. Por lo que sé que tengo que hacer un doble circuito de algún tipo?
Es como: media-STD
Solución
Si los datos están en A
variables, con la media almacenada en meanA
y la desviación estándar almacenada en stdA
, entonces lo siguiente que va a extraer los datos que desea mientras se mantiene el orden original de los valores de datos:
B = A((A > meanA-stdA) & (A < meanA+stdA));
Estos son algunos enlaces de documentación votos que tocan en los conceptos utilizados anteriormente: operadores lógicos , matriz indexación .
Otros consejos
Usted puede simplemente utilizar el Elemento AND lógico
m = mean(A);
sd = std(A);
B = A( A>m-sd & A<m+sd );
Además, sabiendo que: |x|<c iff -c<x<c
, puede combinar tanto en una como:
B = A( abs(A-m)<sd );
Tomando A como su vector original, y B como la final uno:
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);
debería funcionar. Ver FIND para más detalles. El comando FIND está siendo utilizado de manera implícita en el código de seguridad.