replace elements in an Array with other elements

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 日

1 投票

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 件)

Sean de Wolski
Sean de Wolski 2015 年 7 月 20 日
編集済み: Sean de Wolski 2015 年 7 月 20 日

1 投票

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!
Walter Roberson
Walter Roberson 2015 年 7 月 20 日

0 投票

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.

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

Shashank
Shashank 2018 年 6 月 14 日

0 投票

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

カテゴリ

ヘルプ センター および File ExchangeCharacters and Strings についてさらに検索

タグ

質問済み:

2015 年 7 月 20 日

コメント済み:

2020 年 6 月 22 日

Community Treasure Hunt

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

Start Hunting!

Translated by