Matlab - COMPARAR

 
Vista:

COMPARAR

Publicado por Sonia (26 intervenciones) el 14/02/2007 16:34:33
Hola:
Alguien sabe como puedo comparar dos vectores ambos con valores de 0 y 1 y no compararlos elemento a elemento es decir dejar un margen de error por ejemplo de 5 comparar los 5 anteriores y 5 posteriores y si hay alguno igual.Alguien me puede ayudar es que no se como hacerlo.
Muchas gracias
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:COMPARAR

Publicado por Pumy (38 intervenciones) el 15/02/2007 22:06:29
Hola, es difícil sugerir una solución si no sé cuál es el objetivo que buscas. Se me ocurre que puedes querer tener una medida de "cuánto se parecen los dos vectores alrededor de un cierto punto", es decir, como una correlación.

Una solución conceptualmente sencilla sería sumar 1 a un contador por cada elemento que coincida dentro de los 5 que decías de margen. Por ejemplo:

%los vectores a comprarar están en a y en b
l=length(a);
for i=1:l
coincidencias= a(max(1,i-5):min(l,i+5)) == b(max(1,i-5):min(l,i+5));
parecidos(i)=sum(coincidencias);
end

Lo de max y min es para evitar el error al poner subíndices menores de 1 o mayores de la longitud del vector. Atención porque este algoritmo que me acabo de sacar de la manga tiene muchos defectos. Por ejemplo penaliza a los elementos de los extremos del vector pues aunque a y b fuesen iguales en i=1 sólo tendría 6 elementos para comprara. La solución a todo esto la puedes idear teniendo en cuenta los resultados que quieres obtener.
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:COMPARAR

Publicado por Sonia (26 intervenciones) el 16/02/2007 09:42:29
Hola Pumy muchas gracias es que no he utilizado casi nada el matlab y me esta costando mogollon hacer el proyecto porque es todo con matlab.
Perdona pero es que no entendido muy bien lo que penaliza, si que es asi como tu me has dicho . Pero otra cosilla sabrias como podria hacer para poner un 0 en los que me hayan comparado que coincidan si antes habia un 1. Es decir en uno de los vectores cuando ya me los haya comparado y contabilizar sumado todos los que coinciden poner un cero en esos 1 para despues contabilizar los 1 que me quedan sueltos.
Asi estaria bien
l=length(a);
for i=1:l
coincidencias= a(max(1,i-5):min(l,i+5)) == b(max(1,i-5):min(l,i+5));
parecidos(i)=sum(coincidencias);
coincidencias(i)=0
end
Muchas gracias y disculpa las molestias
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:COMPARAR

Publicado por Pumy (38 intervenciones) el 16/02/2007 11:26:52
Hola,
la modificación que has hecho no hace nada, porque fíjate que el vector coincidencias se va a sobreescribir entero en la siguiente iteración del bucle porque la línea:

coincidencias= a(max(1,i-5):min(l,i+5)) == b(max(1,i-5):min(l,i+5));

lo que hace es crear un vector coincidencias nuevo (o machacarlo si existe) con un 1 en las posiciones que coincidan y un 0 en las que no. La longitud de este vector será como máximo 11, por tanto la línea que pusiste te dará error cuando i>11

Te sugiero que te familiarices con la notación de los índices y esas cosas. Con que hagas unos pocos ejemplos sencillos verás que es fácil.

Sigo sin entender lo que intentas hacer ¿qué quieres decir con que coincidan? porque de momento lo que hemos conseguido es tener en coincidencias un vector con el número de elementos que son iguales entre a y b alrededor del elemento i. Será un número entre 0 (si no coincide ninguno) y 11 (si coinciden todos), puede que tu criterio sea que se parecen si coinciden más de 5 o algo así.

Lo de que penaliza quiere decir que por ejemplo al pasar por el primer elemento no puede comparar desde el -5 hasta el 6 porque los negativos no existen, por eso he puesto lo de max(1,i-5), porque si no daría error.

Lo mejor es que copies lo que te puse en un archivo .m (tienes que tenerlo en work o en un directorio que tengas en el path) crear desde la línea de comandos un vector a y un b y llamar al script. Luego escribes:

parecidos

Y te saldrá el resultado. Yo lo probé antes de copiarlo aquí, así que tiene que funcionar.
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:COMPARAR

Publicado por Pumy (38 intervenciones) el 16/02/2007 11:31:10
Se me olvidaba decirte una cosa.

Yo te explico lo que quieras, no me cuesta nada, pero vas a terminar antes si te lees un manual de MATLAB. Los hay por ahí de 10 o 20 páginas y con eso sería suficiente para hacer muchas cosas.

Un saludo.
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