I have two vector X and Y:
X=[2 5 1 9 3 4 nan nan 4 3 6 9 2 nan nan nan 8 2 13 6 1 nan nan];
Y is the max of each segment
Y=[9 9 13];
I need to creat vector Z
Z=[2 5 1 NAN NAN NAN NAN NAN 4 3 6 NAN NAN NAN NAN NAN 8 2 NAN NAN NAN NAN]

 채택된 답변

Luna
Luna 2019년 1월 31일

1 개 추천

Try this:
X=[nan nan 4 3 6 9 2 nan nan nan 8 2 13 6 1 nan];
Y=[9 13];
risingEdgeLocs = find(diff(~isnan(X)) > 0);
indSplit = find(ismember(X,Y));
for i = 1:numel(indSplit)-1
X(indSplit(i):risingEdgeLocs(i+1)) = nan;
end
X(indSplit(end):end) = nan;
Z = X;

댓글 수: 4

benghenia aek
benghenia aek 2019년 1월 31일
편집: benghenia aek 2019년 1월 31일
Luna thank you for the program but when I tried it, it didn't work
X=[2 5 1 9 3 4 nan nan 4 3 6 9 2 nan nan nan 8 2 13 6 1 nan nan];
Y=[9 9 13];
do you have any solution in order to find this vector Z please ?
Z=[2 5 1 NAN NAN NAN NAN NAN 4 3 6 NAN NAN NAN NAN NAN 8 2 NAN NAN NAN NAN]
Luna
Luna 2019년 1월 31일
편집: Luna 2019년 1월 31일
Just added a check:
X=[2 5 1 9 3 4 nan nan 4 3 6 9 2 nan nan nan 8 2 13 6 1 nan nan];
Y=[9 9 13];
risingEdgeLocs = find(diff(~isnan(X)) > 0);
indSplit = find(ismember(X,Y));
if numel(risingEdgeLocs)>=numel(indSplit)
for i = 1:numel(indSplit)-1
X(indSplit(i):risingEdgeLocs(i+1)) = nan;
end
else
for i = 1:numel(risingEdgeLocs)
X(indSplit(i):risingEdgeLocs(i)) = nan;
end
end
X(indSplit(end):end) = nan;
Z = X;
Please accept if it covers your problem :)
benghenia aek
benghenia aek 2019년 1월 31일
Luna thank you very much for your answere
Luna
Luna 2019년 1월 31일
Your welcome :)

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 NaNs에 대해 자세히 알아보기

태그

아직 태그를 입력하지 않았습니다.

질문:

2019년 1월 31일

댓글:

2019년 1월 31일

Community Treasure Hunt

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

Start Hunting!

Translated by