简体   繁体   中英

Insert value at a specific spot in matlab vector or matrix

I'm trying to insert a value to a vector at specific indices, specified in another vector, and then displacing the other values accordingly.

Eg

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]

Is there some straightforward way to do that, preferably avoiding a loop?

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

If you wanted the new values inserted as in your deleted comment, do this:

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

Here is a general function. The idea is the same as @Mark said:

   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

I have never heard of a built-in function for this.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM