Matlab - Separar números de un array

   
Vista:

Separar números de un array

Publicado por Ricardo (4 intervenciones) el 22/03/2017 16:20:12
Hola a todos.

Tengo un problema tontisimo, pero que no sé resolver.

Tengo un array como este:
A=[000 101 111];

Y necesito convertirlo en esto:
A=[0 0 0 1 0 1 1 1 1];

Es decir separar los valores que me vienen de tres en tres, y ponerlos de uno en uno

¿Alguien sabe como hacer esto?

Muchas gracias por adelantado.
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
Imágen de perfil de JESUS DAVID ARIZA ROYETH

Separar números de un array

un arrays está definido con { } , en b te quedan los valores separados

1
2
3
A={'000' '101' '111'};
a=cellfun(@(x) double(x)-48,A,'UniformOutput',false);
b=[a{:}];

saludos
https://www.facebook.com/royethmatlab/
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 números de un array

Publicado por Ricardo (4 intervenciones) el 22/03/2017 16:51:05
Vaya, muchas gracias por la pronta respuesta.

Funciona bien, pero no entiendo muy bien que hace la función cellfun

Si pongo este código:
1
2
3
4
5
6
A={'000' '101' '111' '001' '010'};
a=cellfun(@(x) double(x)-48,A,'UniformOutput',false);
b=[a{:}];
for x=1:1:15;
disp (b(x));
end

Me devuelve esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
0
0
 1
0
 1
 1
 1
 1
0
0
 1
0
 1
0

¿Por qué mete un espacio antes de los 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
Imágen de perfil de JESUS DAVID

Separar números de un array

Publicado por JESUS DAVID jesus.royeth@gmail.com (1514 intervenciones) el 22/03/2017 16:56:42
en mi versión y computadora no está metiendo espacios y no pienso que existan , mejor dale :
1
2
3
4
A={'000' '101' '111' '001' '010'};
a=cellfun(@(x) double(x)-48,A,'UniformOutput',false);
b=[a{:}];
disp (b)

para que te muestre todo el b de una , y cellfun ejecuta una función para cada celda que esté ahí
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 números de un array

Publicado por Ricardo (4 intervenciones) el 22/03/2017 17:03:49
Efectivamente así va mejor.

¿Y el -48 qué hace? Busco en la documentación de Matlab y no veo nada parecido en cellfun.

https://es.mathworks.com/help/matlab/ref/cellfun.html

EDITO: Vale, ya lo entendí, restamos 48 al valor.

Muchísimas gracias por toda la ayuda, me has sacado de un bloqueo.
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 JESUS DAVID ARIZA ROYETH

Separar números de un array

si tú escribes
1
double('0')
te va a devolver el valor de 48 , porque ese es el valor de 0 en los carácteres alt, es decir, si tú presionas alt+48 en tu computadora te saldrá un 0, entonces lo que hace la función double es devolverte un vector con los carácteres que tengas, por ejemplo, si escribes
1
double('01')
te devuelve 48 y 49 , entonces lo único que hace ese -48 ahí es llevarlos a valor real , ponerlos en la fase que corresponde, así si tú escribes
1
double('01')-48
te devuelve 0 y 1 porque ya lo pusiste en la fase que correspondía, es decir, 48-48 y 49-48 , espero hacerme entender.
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 números de un array

Publicado por Ricardo (4 intervenciones) el 22/03/2017 17:13:29
Si, lo acabo de ver.

De nuevo 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
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO

Separar números de un array

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (4473 intervenciones) el 22/03/2017 17:52:14
1
2
3
4
5
6
7
8
9
10
11
12
13
clear all
A=[000 101 111];
k=1;
N=[];
while k<=length(A)
    if A(k)==0
        N=[N '0'  '0'  '0'];
    elseif A(k)~=0
      N=[N,  num2str(A(k)) ];
          end
    k=k+1;
end
N

1
2
3
>> serparar_un_array
N =
000101111
1
2
3
4
>> whos N
  Name      Size            Bytes  Class    Attributes
 
  N         1x9                18  char


Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero/
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
Revisar política de publicidad