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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top