2012-07-15 10 views
5

Sto tentando di inserire un valore su un vettore a indici specifici, specificato in un altro vettore, e quindi spostare gli altri valori di conseguenza.Inserire il valore in un punto specifico nel vettore matlab o nella matrice

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] 

C'è un modo semplice per farlo, preferibilmente evitando un ciclo?

+0

In questa versione della questione i nuovi valori sono al '[2 5]' pur avere specificato '[2 4]' – tmpearce

+0

In realtà hai ragione, le posizioni sono relative al vettore finale, non al vettore iniziale come pensavo. – CHP

risposta

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 

Se si voleva i nuovi valori inseriti come nel tuo commento cancellato, fare questo:

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

Grande, grazie per l'aiuto! – CHP

1

Ecco una funzione generale. L'idea è la stessa di @Mark ha detto:

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 

Non ho mai sentito di una funzione integrata per questo.

Problemi correlati