filling a vector up with a second one

1 view (last 30 days)
Hello,
My Problem: 2 vectors a and b. a=[0;0;0;0;0;5;5;5;4;4] b=[1;1;1;4;4;5;5;5;6;6;9;9;10;10;10;11]
My goal is to replace the 0's in a with the last entries of b and I have no idea how to realise this.
the resulting vector a should look like this: a=[9;10;10;10;11;5;5;5;4;4]
vector b is sorted thanks in advance for your participation!

Accepted Answer

Azzi Abdelmalek
Azzi Abdelmalek on 2 Dec 2012
Edited: Azzi Abdelmalek on 2 Dec 2012
a=[0;0;0;0;0;5;5;5;4;4]
b=[1;1;1;4;4;5;5;5;6;6;9;9;10;10;10;11]
idx=find(~a);
a(idx)=b(end-length(idx)+1:end)

More Answers (2)

Image Analyst
Image Analyst on 2 Dec 2012
Try this:
lastZero = find(a==0, 1, 'last') % Find index of the last zero in a
a(1:lastZero) = b(end-lastZero+1:end) % Replace with elements from b
This will work with situations where a starts with a stretch of zeros and that is where all the zeros are. If you have a different situation, then you should say so, and give an alternate example.

Matt
Matt on 2 Dec 2012
Hi thanks a lot for your answers, they work both!
what could I do if a was
a=[0;0;0;0;0;5;5;5;4;4;0;0]
and i like to receive:
a=[9;10;10;10;11;5;5;5;4;4;0;]
?
thx!
  2 Comments
Image Analyst
Image Analyst on 2 Dec 2012
You need to clarify the rule. The rule as I see it is the same as before except that if there is a stretch of zeros at the end you either lop off all but one, or shorten the ending stretch of zeros by one element.
Azzi Abdelmalek
Azzi Abdelmalek on 2 Dec 2012
Edited: Azzi Abdelmalek on 2 Dec 2012
idx=find(~a)
d=find(diff(idx)~=1,1);
a(1:d)=b(end-d+1:end);
test=0;
k=0;
while test==0
if a(end-k)==0
a(end)=[]
k=1;
else
test=1;
end
end

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!