Matlab - Separar números de un array

 
Vista:
sin imagen de perfil

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
sin imagen de perfil

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

Separar números de un array

Publicado por JESUS DAVID (1818 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
sin imagen de perfil

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

Separar números de un array

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 22/03/2017 17:11:06
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
sin imagen de perfil

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

Separar números de un array

Publicado por JOSE JEREMIAS CABALLERO (5917 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