Bart Goris
Bart Goris

Reputation: 13

Matlab: How to insert zeros in specific places of vector

Can someone help me with the following problem in Matlab? I have a first vector containing the elements values. For example,

[2 8 4 9 3]. 

And a second one with the desired places in a second vector. For example,

[0 0 1 0 0 0 0 1 1 0 0 1 0 0 1]. 

Now I want to put the values from the first vector on the positions of the second one to end up with

[0 0 2 0 0 0 0 8 4 0 0 9 0 0 3]. 

What is the most efficient way of doing this when the size of the vector can be very large. (then thousands of elements)?

Upvotes: 1

Views: 1827

Answers (2)

Rody Oldenhuis
Rody Oldenhuis

Reputation: 38032

Use self-indexing:

% Your values:
V = [2 8 4 9 3];

% The desired locations of these values:
inds = [0 0 1 0 0 0 0 1 1 0 0 1 0 0 1];

% index the indices and assign
inds(inds>0) = V

Upvotes: 5

Simon M
Simon M

Reputation: 266

You can consider the y values as logical indicators, then use logical indexing to set those values to the values in x.

x = [2 8 4 9 3];
y =  [0 0 1 0 0 0 0 1 1 0 0 1 0 0 1];
y(logical(y)) = x;

Alternatively, you could use

y(y==1) = x;

Upvotes: 6

Related Questions