Bonjour,
Je suis un peu surpris par le comportement des fonctions max et nanmax (et par extension par les fonctions min et nanmin).
Petit exemple:
Pour la fonction max: C'est un choix de programmation très surprenant pour moi que de rendre ici 5 à la place de NaN. Bref, admettons que c'est moi qui pense à l'envers pour cette fonction et que c'est logique. Alors ce qui est encore plus incompréhensible, c'est qu'il existe une fonction nanmax qui rend exactement le même résultat. La documentation de nanmax dit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 x= [1 2 NaN 4 5] x = 1 2 NaN 4 5 max(x) ans = 5 nanmax(x) ans = 5
Mais c'est pas ce que fait déjà max ? La différence principale de nanmax avec max c'est qu'elles font exactement la même chose ?!nanmax Maximum value, ignoring NaNs.
M = nanmax(A) returns the maximum of A with NaNs treated as missing.
Des précédents résultats, je pourrais donc conclure que 5 est plus grand que NaN mais:
Moi pas comprendre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 5>NaN ans = 0
J'ai découvert cette bizarrerie alors que je voulais comparer deux listes de la façon suivante:
Donc ce serait quoi le meilleur workaround pour max(a,b) où des NaN sont retournés ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 [a,b] ans = 0.0975 0.1576 0.2785 0.9706 0.5469 NaN 0.9575 0.4854 0.9649 0.8003
Merci !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 r=max(a,b); r(any(isnan([a,b]')))=NaN; % ????
Partager