Matlab - vectorizacion

 
Vista:

vectorizacion

Publicado por avedillo (4 intervenciones) el 15/08/2007 18:37:39
Hola,
Tengo una matriz con datos y aplico una "ventana" para ir haciendo una media corrida (es decir hago la media de los elementos de una columna que estan por encima y por abajo de la posicion para la que quiero la media) sabeis si hay alguna funcion que haga esto empleando vectorización. El uso de for lo tengo descartado por el tiempo de ejecución.
Mi otra solución es:
Pasar de la matriz de 2 dimensiones y a una matriz de 3 dimensiones cogiendo partes para la tercera dimensión. Es decir sería obtener una matriz de 3 dimensiones cada una de las dimensiones el resultado de pasar una ventana sobre la ventana original.

Es un poco complicado de describir pero espero que lo hayais entendido
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:vectorizacion

Publicado por fismat (391 intervenciones) el 15/08/2007 18:46:20
Hola Avedillo

No esta tan clara tu consulta, podria decirse que deseas obtener un promedio movil, si es el caso puedes revizar el comando smooth

para mayor información reviza smooth

help smooth

yy = smooth(ydata) smooths the response data specified by ydata using the moving average method.

Espero sea tu consulta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:vectorizacion

Publicado por avedillo (4 intervenciones) el 15/08/2007 20:06:17
Hola,
Gracias por tu rápida respuesta.
No es lo que estaba buscando.
La señal es muy grande más de 100000 elementos
Lo que pretendo es hacer la media corrida de los elementos de un vector (la parte central del vector), es decir, de cada elemento tomar la media del elemento con los n elementos anteriores a el y los n posteriores)
He intentado probar con buffer pero no hay suficiente memoria.

Resumiendo: pretendo crear un vector nuevo cuyos componentes sean la media del vector con los n elementos previos y n posteriores para luego restarlo al original y tener una linea base de la señal en 0.

Es un poco complicado de explicar y la señal es una matriz pero no veo forma de hacerlo para la matriz.


Gracias y saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:vectorizacion

Publicado por Dan (1 intervención) el 22/08/2007 00:13:34
------------------------------------------------------------
%código Matlab

M=rand(1,1e5); %tu vector original con los 100.000 datos
N=1000; %tu ventana
Nueva=zeros(1,length(M)-N+1); %tu nuevo vector con los promedios
for(a=1:N)
Nueva=Nueva+M(a:end-N+a);
end
Nueva=Nueva/N;
-------------------------------------------------------------

Esto funciona, quizás lo debas ajustar para que cumpla exactamente con tus requisitos

Saludos,

Dan

..
.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:vectorizacion

Publicado por avedillo (4 intervenciones) el 24/08/2007 21:12:22
Muchas gracias, lo acabo de ver y mañana lo pruebo.

Por mi parte lo he resuelto empleando un filtro con numerador todo unos con el tamaño de la ventana y el denominador un 1.

Pero mañana quiero probar tu idea que me ha gustado.

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:vectorizacion

Publicado por avedillo (4 intervenciones) el 25/08/2007 14:13:31
Lo he estado mirando

Es una idea muy buena, no se me había ocurrido aplicar el bucle for en las sumas para hacer la media, en vez de para desplazar la ventana.

Muchas gracias.

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar