Matlab - separar AUTOMATICAMENTE una matriz en vectores que sean sus filas

 
Vista:

separar AUTOMATICAMENTE una matriz en vectores que sean sus filas

Publicado por Pedroddf (6 intervenciones) el 25/11/2013 20:40:26
Hola:

Tengo que separar una matriz en vectores que sean las filas que la forman y hacerlo de forma automática, por ejemplo:


B =

001
010
011
100
101
110
111

Obtener:

B1=001
B2=010
...
B7=111

Manualmente se que se puede hacer con B1=B(1,:), pero no consigo hacerlo con una función que me obtenga los vectores fila automáticamente.

Muchísimas gracias por la ayuda y un saludo
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

separar AUTOMATICAMENTE una matriz en vectores que sean sus filas

Publicado por Pedroddf (6 intervenciones) el 25/11/2013 21:07:56
Una cuestión de la que me he dado cuenta y por desgracia otra pregunta mas:

La matriz de mi pregunta anterior la he obtenido con la función dec2din así:
D=[1:1:s];
B=dec2bin(D);

y obtengo la matriz anterior, como digo, que es:
B =

001
010
011
100
101
110
111
El problema es que la trata como si fueran letras. en el workspace la llama <7x3 char> Y también por eso no puedo realizar ninguna operación con ella.

Les agradecería muchísimo un poco de ayuda porque no consigo salir de esta! gracias
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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

separar AUTOMATICAMENTE una matriz en vectores que sean sus filas

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 26/11/2013 04:16:22
Usa genvarname(). Con ese lo puedes hacer. Ahora cada variable B1, B2, ... va a ser tipo char y no pueden ser numero. Pues no hay numero 001 para matlab, si pones 001 matlab te reconoce como 1.
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

separar AUTOMATICAMENTE una matriz en vectores que sean sus filas

Publicado por Pedroddf (6 intervenciones) el 26/11/2013 20:03:58
Antes de nada, muchas gracias por tu tiempo JOSE JEREMIAS CABALLERO.

entiendo que matlab no reconozca 001 como número, pero si reconoce [0 0 1] como vector. Escribiendo yo la matriz que me interesa dividir en vectores que sean sus filas, lo he resuelto así:

J=[0 0 1;0 1 0; 0 1 1; 1 0 0;1 0 1;1 1 0;1 1 1];
for k=1:7
eval(['a' num2str(k) '= J(k,:);'])

end

Si en lugar de J, utilizo el vector hallado con:

D=[1:1:s];
B=dec2bin(D);

también me divide correctamente en filas, pero como bien decías, cada fila obtenida es del tipo char. No hay forma de pasar ese 001 del tipo char a vector??

Repito que muchas gracias porque a través de tu contestación y siguiendo muchas otras que tienes en este foro, voy consiguiendo elaborar cada día un cachito mas del programa este que me esta matando. 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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

separar AUTOMATICAMENTE una matriz en vectores que sean sus filas

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 27/11/2013 03:07:50
1
2
3
4
5
6
7
8
9
10
11
>> D=[1:1:5];B=dec2bin(D)
>> for i=1:size(B,1),  for j=1:size(B,2), F(i,j)= str2num(B(i,j)); end, end
>> F
 
F =
 
     0     0     1
     0     1     0
     0     1     1
     1     0     0
     1     0     1


Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]


http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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

separar AUTOMATICAMENTE una matriz en vectores que sean sus filas

Publicado por Pedroddf (6 intervenciones) el 27/11/2013 18:25:24
Perfecto JOSE JEREMIAS. La verdad es que viendolo hecho parece una tontería. Es el problema de estar empezando. Muchísimas gracias y 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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

separar AUTOMATICAMENTE una matriz en vectores que sean sus filas

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 27/11/2013 20:23:58
No creo que se parezca una tontería. Llegar a solucionar de la manera como he puesto en lo anterior, viene como un fruto de años de estar programando en Matlab, mas específicamente 13 años programando en matlab, y un promedio de 4 horas por días en matlab. Hay soluciones que uno ve y dice como no se me ocurrió hacerlo así, pero no es tan simple, cuando uno no tiene una basta experiencia en matlab. Hay problemas uno se puede demorar hacerlo una semana y otra persona lo puede hacer una hora o menos de una hora, entonces el que lo hace una hora puede decir que eso es fácil, pero no siempre es así, todo depende de cuanto conoce de matlab, cuanto mas conozcas de matlab, vas a poder resolver un problema en menos tiempo. Muchas personas puede decirte hazlo así, o hazlo de esta manera. Pero pocos son los te dan una solución en concreto.

El secreto no esta en copiarme una solución de matlab del foro, sino el secreto esta que uno trate de contestar las preguntas de matlab del foro. De esta manera aprenderás mucho de matlab. Cada pregunta es alimento para mi personalmente en el estudio de matlab en el foro. Y todas preguntas que contesto en foro lo pueden usar cualquier persona y adaptarlo de acuerdo a sus necesidades.

Claro aclarando también, si una persona hace la pregunta de matlab a mi correo, en eso ya cambia la modalidad y todo pregunta hecho a mi correo tiene un costo. Toda asesoría vía correo tiene costo. De eso pueden dar fe las persona que me escriben de frente a mi correo, pensando que vía correo van a tener una respuesta más rápida a sus correos.

Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]


http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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

separar AUTOMATICAMENTE una matriz en vectores que sean sus filas

Publicado por Pedroddf (6 intervenciones) el 03/12/2013 19:00:43
Tienes toda la razón en lo que dices, espero que no me hayas malinterpretado.

Lo primero que hice con tu última respuesta, fue ponerla en Matlab y entender como funcionaba.

Gracias de nuevo y 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

separar AUTOMATICAMENTE una matriz en vectores que sean sus filas

Publicado por José Luis (1 intervención) el 12/08/2017 17:25:08
Hola Jose

Tengo un problema similar al del compañero que generó la pregunta, pero mi problema es que tengo una matriz de 550x1700 y al momento de correr un código similar al tuyo, se demora demasiado tiempo procesando. Sabes de algún comando o alguna otra forma de realizarlo?

Adjunto el código que tengo hasta ahora, la matriz se llama Tabla_Flux y la quiero pasar al vector B

1
2
3
4
5
6
7
8
9
10
11
P=450-P_av;
n_2=size(Tabla_Flux);
for q=1:n_2(1)
    P=P+P_av;
    for p=1:n_2(2)
        l=p+n_2(2)*(q-1);
        C(l,1)=Tabla_Flux(q,p);
        C(l,2)=x(p);
        C(l,3)=P;
    end
end

Feliz día
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

separar AUTOMATICAMENTE una matriz en vectores que sean sus filas

Publicado por Camilo (1 intervención) el 27/06/2018 19:37:23
Creo que dada la fecha actual, esto ya no sea de interés particular, pero pudo resolverse así:

A la matriz B le restas 48, te quedaría una matriz donde cada fila es un vector cuyos elementos son los dígitos binarios. Es decir, el 48 corresponde al 0 en ASCII, y debido a que quieres convertir datos de tipo caracter a número, esta es una estrategia que se podría implementar, finalmente obtienes que cada elemento queda en una celda correspondiente. El ejemplo es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
% Valores en representación a decimal.
D = 0:10;
 
% Cantidad de bits con los cuales se va a cuantizar.
q = 5;
 
% Convierte de decimal a binario utilizando 'q' bits.
B = dec2bin(D,q)                          % El resultado es de tipo char con tamaño 11x5.
 
% Realiza la misma conversión pero se convierte en una matriz de tipo double.
B = dec2bin(D,q) - 48                  % El resultado es de tipo double de 11x5, y cada digito ocupa una celda.
 
 
B =
 
  11×5 char array
 
    '00000'
    '00001'
    '00010'
    '00011'
    '00100'
    '00101'
    '00110'
    '00111'
    '01000'
    '01001'
    '01010'
 
 
B =
 
     0     0     0     0     0
     0     0     0     0     1
     0     0     0     1     0
     0     0     0     1     1
     0     0     1     0     0
     0     0     1     0     1
     0     0     1     1     0
     0     0     1     1     1
     0     1     0     0     0
     0     1     0     0     1
     0     1     0     1     0
 
>>


Finalmente, se podría utilizar la función eval como lo plantean anteriormente.
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