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]

 Réponse acceptée

Luna
Luna le 31 Jan 2019

1 vote

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 commentaires

benghenia aek
benghenia aek le 31 Jan 2019
Modifié(e) : benghenia aek le 31 Jan 2019
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 le 31 Jan 2019
Modifié(e) : Luna le 31 Jan 2019
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 le 31 Jan 2019
Luna thank you very much for your answere
Luna
Luna le 31 Jan 2019
Your welcome :)

Connectez-vous pour commenter.

Plus de réponses (0)

Tags

Aucun tag saisi pour le moment.

Community Treasure Hunt

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

Start Hunting!

Translated by