replace elements in an Array with other elements

78 ビュー (過去 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 ExchangeCharacters and Strings についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by