Bonjour,
Voilà maintenant quelques heures que je me creuse la tête pour découper un vecteur d'une façon particulière.
J'ai par exemple un vecteur Qobs90s (il s'appelle comme ça chez moi) qui est défini comme tel :
Ce que je veux, c'est extraire l'emplacement des chiffres précédents et suivants les -999 mais aussi ajouter 1 dans le cas où la série de commence pas par un -999 et ajouter une length(Qobs90s) dans le cas où la série ne se termine pas par un -999. Donc ici la réponse désirée serait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Qobs90s=[31 22 71 -999 -999 12 31 11 -999 -999 17 -999 -999 21 41 -999]
J'ai écris ce qui se trouve dessous mais je n'arrive pas à surmonter le problème où il y a deux -999 séparés seulement d'une seule valeur positive (ça fonctionne mais j'ai un nombre d'élément impair dans mon vecteur idx ce qui m’empêche d'utiliser le reshape). C'est un bout de code qui devrait préparer des bases de données et je voudrais donc qu'il soit robuste.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 idx = 1 3 6 8 11 11 14 15
Le petit bout de code :Merci beaucoup à ceux qui auront des idées (et à ceux qui n'en n'auront pas mais qui auront pris le temps de lire ce message
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 Qobs90s=Qobs90s'; idx=1; for m=1:length(Qobs90s)-1 if Qobs90s(m)<0 if Qobs90s(m-1)>0 idx=[idx,m-1]; if Qobs90s(m+1)>0 idx=[idx,m+1]; end end if Qobs90s(m+1)>0 idx=[idx,m+1]; end end end idx=unique(idx); if idx==1 idx=[1;length(Qobs90s)]; else if Qobs90s(end)<0 idx=reshape(idx,2,[]); else idx=[idx,length(Qobs90s)]; idx=reshape(idx,2,[]); end end disp((idx'));)
Partager