
Script Matlab + combinación vectores + trabajo con tabla
Publicado por Iván (9 intervenciones) el 28/11/2016 01:49:07
Buenas, como bien escribo en el título, mi consulta se basa en un ejercicio multinivel, que se basa en lo siguiente.
Como primera parte intento diseñar un script de Matlab, o en su defecto varios scripts, cuya función es la de extraer datos útiles de un archivo de texto (.txt o .dat). Una vez hecho lo primero, debo combinar los vectores obtenidos en una tabla, aquí tengo el primer problema ya que utilizando los distintos scripts, no consigo que todos los vectores tengan el mismo tamaño. Cuando importo desde el editor de Matlab genero un vector 44x1, sin embargo cuando ejecuto el script correspondiente a la selección importada se genera un 43x1. No sé como solucionarlo ya que todos los vectores deberían tener el mismo tamaño.
Después de esto me preguntaba como puedo hacer para buscar un dato en la tabla resultante de la combinación de vectores, ya que pretendo eliminar las filas que contengan un dato en concreto, por ejemplo:
- Los datos de la quinta columna de la tabla son en su mayoría, ceros, pero existen casos en los que el dato es distinto de 0, no por error, sino porque es el obtenido, pues para el caso en el que su valor en la cuarta fila sea distinto de 0, necesito eliminar toda la cuarta fila. Es decir, que revise toda la columna y cuando encuentre un valor distinto de 0, borre toda la fila correspondiente.
Después de esto necesito aplicar una división en la tabla. En la tercera columna tengo datos en forma de texto, pero estos datos no son siempre iguales. Por ejemplo, supongamos que tengo 5 filas y en la tercera columna tengo, por fila, [3 3 2 2 3], necesitaría separar los datos en dos tablas, en la primera tabla todas las filas cuyo valor de la tercera columna sea tres, en la segunda tabla todas las filas cuyo valor de la tercera columna sea dos, de esta manera separaría de forma lógica los datos para trabajar a posteriori. No sé si Matlab permite realizar esto ni cómo.
Por último, una vez aplicados los dos primeros pasos, necesito trabajar con la tabla. Debo buscar un dato de una columna que sea distinto de 0, esta vez no para eliminarlo, sino para emplearlo en cálculos. Es decir, una función que busque un valor distinto de 0 en esa columna, una vez hecho eso necesito otros dos datos para los cálculos, pero debo tomarlos de la tabla, de un punto cercano cercano al que el valor anterior era distinto de 0, es decir, que si encuentro el valor en la 31ª fila, no puedo utilizar los otros datos de la 1ª y 2ª fila, sino que busque alrededor de la 31ª fila en otras dos columnas que sean distintas de 0. No sé exactamente como realizarlo con Matlab, si utilizando la función find y los condicionales.
Una vez hecho todo esto ya tendría que repetir el cálculo para todos los casos en los que esa columna sea distinta de 0, por ejemplo, en la 31ª fila, en la 56ª, etc. Creo que se podría realizar con un bucle pero no sé exactamente cómo.
Agradecería mucho la ayuda, si alguien tiene más dudas del archivo con el que estoy trabajando para saber qué es exactamente lo que busco puedo adjuntar posteriormente.
Como primera parte intento diseñar un script de Matlab, o en su defecto varios scripts, cuya función es la de extraer datos útiles de un archivo de texto (.txt o .dat). Una vez hecho lo primero, debo combinar los vectores obtenidos en una tabla, aquí tengo el primer problema ya que utilizando los distintos scripts, no consigo que todos los vectores tengan el mismo tamaño. Cuando importo desde el editor de Matlab genero un vector 44x1, sin embargo cuando ejecuto el script correspondiente a la selección importada se genera un 43x1. No sé como solucionarlo ya que todos los vectores deberían tener el mismo tamaño.
Después de esto me preguntaba como puedo hacer para buscar un dato en la tabla resultante de la combinación de vectores, ya que pretendo eliminar las filas que contengan un dato en concreto, por ejemplo:
- Los datos de la quinta columna de la tabla son en su mayoría, ceros, pero existen casos en los que el dato es distinto de 0, no por error, sino porque es el obtenido, pues para el caso en el que su valor en la cuarta fila sea distinto de 0, necesito eliminar toda la cuarta fila. Es decir, que revise toda la columna y cuando encuentre un valor distinto de 0, borre toda la fila correspondiente.
Después de esto necesito aplicar una división en la tabla. En la tercera columna tengo datos en forma de texto, pero estos datos no son siempre iguales. Por ejemplo, supongamos que tengo 5 filas y en la tercera columna tengo, por fila, [3 3 2 2 3], necesitaría separar los datos en dos tablas, en la primera tabla todas las filas cuyo valor de la tercera columna sea tres, en la segunda tabla todas las filas cuyo valor de la tercera columna sea dos, de esta manera separaría de forma lógica los datos para trabajar a posteriori. No sé si Matlab permite realizar esto ni cómo.
Por último, una vez aplicados los dos primeros pasos, necesito trabajar con la tabla. Debo buscar un dato de una columna que sea distinto de 0, esta vez no para eliminarlo, sino para emplearlo en cálculos. Es decir, una función que busque un valor distinto de 0 en esa columna, una vez hecho eso necesito otros dos datos para los cálculos, pero debo tomarlos de la tabla, de un punto cercano cercano al que el valor anterior era distinto de 0, es decir, que si encuentro el valor en la 31ª fila, no puedo utilizar los otros datos de la 1ª y 2ª fila, sino que busque alrededor de la 31ª fila en otras dos columnas que sean distintas de 0. No sé exactamente como realizarlo con Matlab, si utilizando la función find y los condicionales.
Una vez hecho todo esto ya tendría que repetir el cálculo para todos los casos en los que esa columna sea distinta de 0, por ejemplo, en la 31ª fila, en la 56ª, etc. Creo que se podría realizar con un bucle pero no sé exactamente cómo.
Agradecería mucho la ayuda, si alguien tiene más dudas del archivo con el que estoy trabajando para saber qué es exactamente lo que busco puedo adjuntar posteriormente.
Valora esta pregunta


0