filling a vector up with a second one

1 回表示 (過去 30 日間)
Matt
Matt 2012 年 12 月 2 日
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!
  1 件のコメント
Azzi Abdelmalek
Azzi Abdelmalek 2012 年 12 月 2 日
Can you have a as [0;0;5;5;0;0;4;4;0;0]

サインインしてコメントする。

採用された回答

Azzi Abdelmalek
Azzi Abdelmalek 2012 年 12 月 2 日
編集済み: Azzi Abdelmalek 2012 年 12 月 2 日
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)

その他の回答 (2 件)

Image Analyst
Image Analyst 2012 年 12 月 2 日
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 2012 年 12 月 2 日
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 件のコメント
Image Analyst
Image Analyst 2012 年 12 月 2 日
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 2012 年 12 月 2 日
編集済み: Azzi Abdelmalek 2012 年 12 月 2 日
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

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeHypothesis Tests についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by