From e1f2e4029a063ea744e193ee8d72c2bee9dffcae Mon Sep 17 00:00:00 2001 From: Thibault Hallouin <thibault.hallouin@inrae.fr> Date: Wed, 19 Apr 2023 17:42:21 +0200 Subject: [PATCH] fix bug in generating masks from conditions due to NaN in series `xt::median` and `xt::quantile` are not NaN-proof, and do not have equivalent NaN functions (like `xt::mean` and `xt::nanmean`) so it required a filter to drop the NaN before computing the corresponding condition value --- include/evalhyd/detail/masks.hpp | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/include/evalhyd/detail/masks.hpp b/include/evalhyd/detail/masks.hpp index a0706c5..d1d503e 100644 --- a/include/evalhyd/detail/masks.hpp +++ b/include/evalhyd/detail/masks.hpp @@ -232,17 +232,29 @@ namespace evalhyd { return std::stod(num); } - else if (str == "median") - { - return xt::median(q); - } - else if (str == "mean") - { - return xt::mean(q)(); - } - else // (str == "qtl") + else { - return xt::quantile(q, {std::stod(num)})(); + auto q_filtered = xt::filter(q, !xt::isnan(q)); + + if (q_filtered.size() > 0) + { + if (str == "median") + { + return xt::median(q_filtered); + } + else if (str == "mean") + { + return xt::mean(q_filtered)(); + } + else // (str == "qtl") + { + return xt::quantile(q_filtered, {std::stod(num)})(); + } + } + else + { + return double(NAN); + } } }; -- GitLab