Eliminar filas matriz selectivamente
Publicado por Perico (2 intervenciones) el 13/12/2017 14:35:53
Hola,
tengo una matriz de cuatro columnas (en realidad es un "cell", ya que en la primera columna hay cadenas de texto, y en las otras tres hay números. Por ejemplo:
a 1 0 2
a 1 1 2
b 1 1 2
c 2 0 0
d 2 0 1
e 2 0 1
Ahora quiero que Matlab haga lo siguiente:
1-Buscar todas las filas de la matriz cuyas 2ª, 3ª y 4ª fila formen un bloque que no se repita. En nuestro ejemplo, serían las filas 1 y 4.
2-Anotar todas las cadenas de texto que encontremos como primer elemento de dichas filas. En nuestro ejemplo, serían 'a' y 'c'.
3-Eliminar todas las filas de la matriz que tengan por primer elemento las citadas cadenas de texto. En nuestro ejemplo, eso significaría eliminar las filas 1, 2 y 4, quedando entonces la matriz:
b 1 1 2
d 2 0 1
e 2 0 1
Sabría como hacer esto con una complicada combinación de bucles for... pero sospecho que me saldría un código lento y poco optimizado, lo cual sería grave porque las matrices con las que trabajo no son de seis filas, sino de decenas de miles. No conozco a fondo Matlab, pero he oído que destaca precisamente por gestionar muy bien matrices, arrays, etc. Puede que haya funciones muy apropiadas para desarrollar este algoritmo de forma sencilla y limpia. Os agradecería alguna ayuda al respecto.
Saludos!
tengo una matriz de cuatro columnas (en realidad es un "cell", ya que en la primera columna hay cadenas de texto, y en las otras tres hay números. Por ejemplo:
a 1 0 2
a 1 1 2
b 1 1 2
c 2 0 0
d 2 0 1
e 2 0 1
Ahora quiero que Matlab haga lo siguiente:
1-Buscar todas las filas de la matriz cuyas 2ª, 3ª y 4ª fila formen un bloque que no se repita. En nuestro ejemplo, serían las filas 1 y 4.
2-Anotar todas las cadenas de texto que encontremos como primer elemento de dichas filas. En nuestro ejemplo, serían 'a' y 'c'.
3-Eliminar todas las filas de la matriz que tengan por primer elemento las citadas cadenas de texto. En nuestro ejemplo, eso significaría eliminar las filas 1, 2 y 4, quedando entonces la matriz:
b 1 1 2
d 2 0 1
e 2 0 1
Sabría como hacer esto con una complicada combinación de bucles for... pero sospecho que me saldría un código lento y poco optimizado, lo cual sería grave porque las matrices con las que trabajo no son de seis filas, sino de decenas de miles. No conozco a fondo Matlab, pero he oído que destaca precisamente por gestionar muy bien matrices, arrays, etc. Puede que haya funciones muy apropiadas para desarrollar este algoritmo de forma sencilla y limpia. Os agradecería alguna ayuda al respecto.
Saludos!
Valora esta pregunta


0