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.

추가 답변 (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

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 Exchange에서 Characters 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