필터 지우기
필터 지우기

replace elements in an Array with other elements

조회 수: 32 (최근 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.

추가 답변 (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 CenterFile Exchange에서 Whos에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by