Matlab - Extracción de vectores en una matriz

 
Vista:
sin imagen de perfil
Val: 17
Ha aumentado su posición en 5 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Extracción de vectores en una matriz

Publicado por José Manuel (6 intervenciones) el 16/11/2020 19:26:00
Buenas tardes a todos.

Tengo una nueva duda de Matlab. Os planteo:

Tengo una matriz (llamémosla A) con muchas filas, hablo de cientos o miles de filas, y deseo extraer de ella para crear una nueva matriz B, un numero determinado de filas, según otra matriz columna de índices (matriz C). Dicha matriz C corresponde al índice de filas de la primera matriz A: por ejemplo:

C = [1 5 7 10 12]'

Con ello pretendo extraer de la matriz A, las filas primera, quinta, séptima, décima, decimo segunda...

si la matriz A (20x6) = [2 4 7 5 6 2; 2 2 2 3 1 0; 1 4 7 5 6 2; 2 3 3 2 4 1; 7 5 4 2 3 9; 1 1 3 7 8 4; 2 2 2 0 7 3; 7 4 5 1 2 2; 6 4 7 3 2 1; 0 4 7 3 5 2; 1 1 1 7 7 4; 0 7 8 1 5 3; 4 5 6 1 4 5; 5 8 7 2 1 3; 4 4 7 2 5 4; 4 5 6 7 7 8; 0 4 0 7 4 5; 7 4 1 1 1 1; 4 4 7 8 9 9; 1 4 7 5 2 2]

Entonces C = [2 4 7 5 6 2; 7 5 4 2 3 9; 2 2 2 0 7 3; 0 4 7 3 5 2; 0 7 8 1 5 3]

Y si se complica el asunto, por ser C una matriz con varias columnas (n), cada una de ellas compuesta por índices de vectores fila a extraer (cada columna de índices generaría una nueva matriz C1, C2,... Cn), entonces imagino que se resolvería con un bucle, pero lamentablemente no se cómo...

Os agradezco cualquier aportación.

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
sin imagen de perfil
Val: 1.059
Bronce
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Extracción de vectores en una matriz

Publicado por Daniel (344 intervenciones) el 16/11/2020 21:49:45
Hola,

No termino de entender bien el problema, pero si lo que se desea es guardar una cantidad arbitraría de matrices los mejor es usar celdas.

1
2
3
4
5
6
7
8
9
10
11
12
13
A = [2 4 7 5 6 2; 2 2 2 3 1 0; 1 4 7 5 6 2; 2 3 3 2 4 1; 7 5 4 2 3 9; 1 1 3 7 8 4; 2 2 2 0 7 3; 7 4 5 1 2 2; 6 4 7 3 2 1; 0 4 7 3 5 2; 1 1 1 7 7 4; 0 7 8 1 5 3; 4 5 6 1 4 5; 5 8 7 2 1 3; 4 4 7 2 5 4; 4 5 6 7 7 8; 0 4 0 7 4 5; 7 4 1 1 1 1; 4 4 7 8 9 9; 1 4 7 5 2 2];
C = [1 5 7 10 12];
 
C = A(C, :)
 
result = cell(1, size(C, 2));
 
% Necesario porque los 0 no pueden ser indices.
C = C + 1;
 
for i = 1:length(result)
    result{i} = A(C(:, i), :);
end

Así, en result{i} esta la matriz c_i

Saludos,
Daniel Rodríguez
Analytics Lane
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
sin imagen de perfil
Val: 17
Ha aumentado su posición en 5 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Extracción de vectores en una matriz

Publicado por José Manuel (6 intervenciones) el 17/11/2020 12:41:19
Daniel, en primer lugar, [b]muchas gracias por tu ayuda...

Sí, en partes has entendido lo que necesito, pero tu script funciona correctamente si C es una matriz con una sola fila. Es decir si:
C = [1 5 7 10 12], con ello pretendo extraer en una nueva matriz C1, los vectores de la matriz A correspondientes a las filas primera (1), quinta(5), séptima(7), décima(10), y decimosegunda(12). Pero, ¿y si a mi matriz C le añado una segunda fila, para extraer en otra matriz C2 por ejemplo la segunda(2), primera(1), cuarta(4), sexta(6), y octava(8), y de forma secuencial tal que:

C = [1 5 7 10 12; 2, 1, 4, 6, 8] ???

Una matriz C1; y otra matriz C2

hacerlo de forma secuencial cero que debe ser fácil, pero no doy con ello...

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 7.541
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Extracción de vectores en una matriz

Publicado por JOSE JEREMIAS CABALLERO (5835 intervenciones) el 19/11/2020 17:15:34
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
A=[2 4 7 5 6 2;
     2 2 2 3 1 0;
     1 4 7 5 6 2;
     2 3 3 2 4 1;
     7 5 4 2 3 9;
     1 1 3 7 8 4;
     2 2 2 0 7 3;
     7 4 5 1 2 2;
     6 4 7 3 2 1;
     0 4 7 3 5 2;
     1 1 1 7 7 4;
     0 7 8 1 5 3;
     4 5 6 1 4 5;
     5 8 7 2 1 3;
     4 4 7 2 5 4;
     4 5 6 7 7 8;
     0 4 0 7 4 5;
     7 4 1 1 1 1;
     4 4 7 8 9 9;
     1 4 7 5 2 2];
 
 C = [1 5 7 10 12]';
 C=A(C,:)
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