replace elements in an Array with other elements

70 ビュー (過去 30 日間)
Rica
Rica 2015 年 7 月 20 日
コメント済み: Juan Jiménez 2020 年 6 月 22 日
hi all,
i have the folwing situation:
i have an array:
A=[1 2 3 4 4 4 5 8 7 4 6 4]
i want to find the element equal to the value 4.
I do this:
index=find(A==4)
i want now to replace the element with this index with the previous value. it means i want to get:
A_new=[1 2 3 3 3 3 5 8 7 7 6 6].
i did it with a loop. is there any method without loop?
thank you

採用された回答

Guillaume
Guillaume 2015 年 7 月 20 日
While it may be possible to do it without a loop, with a combination of diff, find and possibly cumsum it's going to be a lot more obscure than a simple loop and probably not any more efficient.
The simplest loop would be:
for idx = find(A == 4)
A(idx) = A(idx-1);
end
which also works for consecutive elements to replace.
  1 件のコメント
Juan Jiménez
Juan Jiménez 2020 年 6 月 22 日
Excellent! I need this. Thank you so much.

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

その他の回答 (3 件)

Walter Roberson
Walter Roberson 2015 年 7 月 20 日
A_new = A;
A_new(index) = A(index-1);
This will fail if the very first thing was a 4, as there is no "previous" for the first element.
  1 件のコメント
Guillaume
Guillaume 2015 年 7 月 20 日
This also fails on the example given, when there are consecutive elements to replace.

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


Sean de Wolski
Sean de Wolski 2015 年 7 月 20 日
編集済み: Sean de Wolski 2015 年 7 月 20 日
A=[1 2 3 4 4 4 5 8 7 4 6 4]
idx = find(A~=4);
B = interp1(idx,A(idx),1:numel(A),'previous','extrap')
Gotta love the 'previous' and 'next' options added to interp1 a few releases ago!

Shashank
Shashank 2018 年 6 月 14 日
How can I copy paste 2nd element to 3rd, 3rd to 4th and so on.. A=[1,2,3,4,5,6,7]; A_New=[1,2,2,3,3,4,4,5,5,6,6,7]; ---> Required

カテゴリ

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

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by