2012-07-15 25 views
5

Estoy tratando de insertar un valor en un vector en índices específicos, especificados en otro vector, y luego desplazando los otros valores en consecuencia.Insertar valor en un punto específico en el vector o matriz de matlab

E.g.

Vector=[1 2 3 4 5] %vector of data 
Idx=[2 4] %Indices at which to insert a value 

Value to insert is X 

NewVector=[1 X 2 X 3 4 5] 

¿Hay alguna forma directa de hacerlo, preferiblemente evitando un bucle?

+0

En esta versión de la pregunta que los nuevos valores están en '[2 5]' a pesar de que especifica '[2 4]' – tmpearce

+0

En realidad, tienes razón, las posiciones son relativas al vector final, no al vector inicial, como yo pensaba. – CHP

Respuesta

4
Vector=1:5; 
Idx=[2 4]; 
c=false(1,length(Vector)+length(Idx)); 
c(Idx)=true; 
result=nan(size(c)); 
result(~c)=Vector; 
result(c)=42 

result = 

    1 42  2 42  3  4  5 

Si quería los nuevos valores insertados como en su Comentario eliminado, hacer esto:

c(Idx+(0:length(Idx)-1))=true; 
+0

Genial, gracias por la ayuda! – CHP

1

Aquí hay una función general. La idea es la misma que @Mark dijo:

function arrOut = insertAt(arr,val,index) 
     assert(index<= numel(arr)+1); 
     assert(index>=1); 
     if index == numel(arr)+1 
      arrOut = [arr val]; 
     else 
      arrOut = [arr(1:index-1) val arr(index:end)]; 
     end 
    end 

Nunca he oído hablar de una función incorporada para esto.

Cuestiones relacionadas