Matlab - Insertar valores en vector

 
Vista:

Insertar valores en vector

Publicado por angela (2 intervenciones) el 26/09/2018 18:39:32
Hola,
tengo un problema que no se como resolver.
El caso es que tengo un vector del tipo por ejemplo:
x=[2 4 6 8 4]

y quiero que cada vez que aparezca el valor 4 se añada un 11 y un 12 detrás,
de modo que el vector final fuera

x=[2 4 11 12 6 8 4 11 12]

espero que alguien pueda echarme una mano!!
Muchas gracias,
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
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 4.572
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Insertar valores en vector

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 26/09/2018 18:53:47
1
2
3
4
5
6
7
8
9
x=[2 4 6 8 4];
s=[0 find(x==4)];
r=[];
for k=1:length(s)-1
    r=[r x(s(k)+1:s(k+1)) 11 12];
end
r=[r x(s(end)+1:length(x))];
x=r;
disp(x)
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

Insertar valores en vector

Publicado por angela (2 intervenciones) el 26/09/2018 19:16:28
Muchas gracias Jesus.
Como lo podríamos aplicar a una matriz en su caso?
Por ejemplo:
x=[2 4 5
3 5 4]
Muchas gracias
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 JESUS DAVID ARIZA ROYETH
Val: 4.572
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Insertar valores en vector

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 26/09/2018 19:58:03
hay otra forma de hacerlo sin for :

1
2
3
4
5
6
7
8
x=[2 4 6 8 4];
s=find(x==4);
r=[];
xd= repelem(s,1,2)+repelem(0:2:length(s)*2-2,1,2)+repmat([1 2],1,length(s));
r(xd)=repmat([11 12],1,length(s));
r(setdiff(1:length(x)+2*length(s),xd))=x;
x=r;
disp(x)

pero para el caso de matriz debes tener en cuenta que el número de 4 por fila tiene que ser el mismo para que la matriz se mantenga rectangular, en este caso el código para matriz te quedaría así :

1
2
3
4
5
6
7
8
9
10
11
12
matriz=[2 4 5;3 5 4];
matriz2=[];
for k=1:size(matriz,1)
    x=matriz(k,:);
s=find(x==4);
r=[];
xd= repelem(s,1,2)+repelem(0:2:length(s)*2-2,1,2)+repmat([1 2],1,length(s));
r(xd)=repmat([11 12],1,length(s));
r(setdiff(1:length(x)+2*length(s),xd))=x;
matriz2=[matriz2; r];
end
disp(matriz2)


y la ejecución te devuelve :
2 4 11 12 5
3 5 4 11 12
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: 8.160
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Insertar valores en vector

Publicado por JOSE JEREMIAS CABALLERO (5616 intervenciones) el 26/09/2018 22:12:40
1
2
3
4
5
6
7
8
9
10
11
12
13
clear all
x=[2 4 6 8 4]
k=1;
for i=1:length(x)
    if x(i)~=4
        A(k)=x(i);
        k=k+1;
    else
        A(k:k+2)=[4,11:12];
        k=k+3;
    end
end
x=A

1
2
3
>> insertar_valores
x =
     2     4    11    12     6     8     4    11    12
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: 8.160
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Insertar valores en vector

Publicado por JOSE JEREMIAS CABALLERO (5616 intervenciones) el 26/09/2018 22:32:12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
clear all
x=[2 4 5 4 6
      3 5 4 8 4 ];
 for j=1:size(x,1)
k=1;
for i=1:size(x,2)
    if x(j,i)~=4
        A(k)=x(j,i);
        k=k+1;
    else
        A(k:k+2)=[4,11:12];
        k=k+3;
    end
end
 X(j,:)=A;
 clear A
 end
x=X


1
2
3
4
5
6
7
8
9
>> insertar_valores1
x =
     2     4     5     4     6
     3     5     4     8     4
 
 
x =
     2     4    11    12     5     4    11    12     6
     3     5     4    11    12     8     4    11    12



1
2
3
4
5
6
7
8
9
>> insertar_valores1
x =
 
     2     4     5     4
     3     5     4     8
 
Subscripted assignment dimension mismatch.
Error in insertar_valores1 (line 16)
 X(j,:)=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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 8.160
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Insertar valores en vector

Publicado por JOSE JEREMIAS CABALLERO (5616 intervenciones) el 26/09/2018 23:30:53
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
clear all
x=[2 4 5 4 6
  3 5 4 8 4 ]
 for j=1:size(x,1)
   A=[];
for i=1:size(x,2)
    if x(j,i)~=4
        A=[A x(j,i)];
    else
       A=[A 4,11:12 ];
    end
end
 X(j,:)=A;
 end
X


1
2
3
4
5
6
7
8
9
10
11
12
>> insertar_valores3
 
x =
 
     2     4     5     4     6
     3     5     4     8     4
 
 
X =
 
     2     4    11    12     4     4    11    12     5
     2     3     4    11    12     5     4    11    12
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