NaN functions
xtensor provides the following functions that deal with NaNs in xexpressions:
Defined in xtensor/xmath.hpp
-
template<class E>
inline auto xt::nan_to_num(E &&e) Convert nan or +/- inf to numbers.
This functions converts NaN to 0, and +inf to the highest, -inf to the lowest floating point value of the same type.
- Parameters:
e – input xexpression
- Returns:
an xexpression
-
template<class T = void, class E, class X, class EVS = std::tuple<evaluation_strategy::lazy_type>, xtl::check_concept<xtl::negation<is_reducer_options<X>>, xtl::negation<xtl::is_integral<std::decay_t<X>>>> = 0>
inline auto xt::nanmin(E &&e, X &&axes, EVS es = EVS()) Minimum element over given axes, ignoring NaNs.
Returns an xreducer for the minimum of elements over given
axes
, ignoring NaNs.Warning
Casting the result to an integer type can cause undefined behavior.
- Parameters:
e – an xexpression
axes – the axes along which the minimum is found (optional)
es – evaluation strategy of the reducer (optional)
- Template Parameters:
T – the result type. The default is
E::value_type
.- Returns:
an xreducer
-
template<class T = void, class E, class X, class EVS = std::tuple<evaluation_strategy::lazy_type>, xtl::check_concept<xtl::negation<is_reducer_options<X>>, xtl::negation<xtl::is_integral<std::decay_t<X>>>> = 0>
inline auto xt::nanmax(E &&e, X &&axes, EVS es = EVS()) Maximum element along given axes, ignoring NaNs.
Returns an xreducer for the sum of elements over given
axes
, ignoring NaN.Warning
Casting the result to an integer type can cause undefined behavior.
- Parameters:
e – an xexpression
axes – the axes along which the sum is performed (optional)
es – evaluation strategy of the reducer (optional)
- Template Parameters:
T – the result type. The default is
E::value_type
.- Returns:
an xreducer
-
template<class T = void, class E, class X, class EVS = std::tuple<evaluation_strategy::lazy_type>, xtl::check_concept<xtl::negation<is_reducer_options<X>>, xtl::negation<xtl::is_integral<std::decay_t<X>>>> = 0>
inline auto xt::nansum(E &&e, X &&axes, EVS es = EVS()) Sum of elements over given axes, replacing NaN with 0.
Returns an xreducer for the sum of elements over given
axes
, ignoring NaN.- Parameters:
e – an xexpression
axes – the axes along which the sum is performed (optional)
es – evaluation strategy of the reducer (optional)
- Template Parameters:
T – the value type used for internal computation. The default is
E::value_type
.T
is also used for determining the value type of the result, which is the type ofT() + E::value_type()
. You can passbig_promote_value_type_t<E>
to avoid overflow in computation.- Returns:
an xreducer
-
template<class T = void, class E, class X, class EVS = std::tuple<evaluation_strategy::lazy_type>, xtl::check_concept<xtl::negation<is_reducer_options<X>>> = 0>
inline auto xt::nanmean(E &&e, X &&axes, EVS es = EVS()) Mean of elements over given axes, excluding NaNs.
Returns an xreducer for the mean of elements over given axes, excluding NaNs. This is not the same as counting NaNs as zero, since excluding NaNs changes the number of elements considered in the statistic.
- Parameters:
e – an xexpression
axes – the axes along which the mean is computed (optional)
es – the evaluation strategy (optional)
- Template Parameters:
T – the result type. The default is
E::value_type
. You can passbig_promote_value_type_t<E>
to avoid overflow in computation.- Returns:
an xexpression
-
template<class T = void, class E, class X, class EVS = std::tuple<evaluation_strategy::lazy_type>, xtl::check_concept<xtl::negation<is_reducer_options<X>>> = 0>
inline auto xt::nanvar(E &&e, X &&axes, EVS es = EVS()) Compute the variance along the specified axes, excluding NaNs.
Returns the variance of the array elements, a measure of the spread of a distribution. The variance is computed for the flattened array by default, otherwise over the specified axes. Excluding NaNs changes the number of elements considered in the statistic.
Note: this function is not yet specialized for complex numbers.
See also
nanstd, nanmean
- Parameters:
e – an xexpression
axes – the axes along which the variance is computed (optional)
es – evaluation strategy to use (lazy (default), or immediate)
- Template Parameters:
T – the result type. The default is
E::value_type
. You can passbig_promote_value_type_t<E>
to avoid overflow in computation.- Returns:
an xexpression
-
template<class T = void, class E, class X, class EVS = std::tuple<evaluation_strategy::lazy_type>, xtl::check_concept<xtl::negation<is_reducer_options<X>>> = 0>
inline auto xt::nanstd(E &&e, X &&axes, EVS es = EVS()) Compute the standard deviation along the specified axis, excluding nans.
Returns the standard deviation, a measure of the spread of a distribution, of the array elements. The standard deviation is computed for the flattened array by default, otherwise over the specified axis. Excluding NaNs changes the number of elements considered in the statistic.
Note: this function is not yet specialized for complex numbers.
See also
nanvar, nanmean
- Parameters:
e – an xexpression
axes – the axes along which the standard deviation is computed (optional)
es – evaluation strategy to use (lazy (default), or immediate)
- Template Parameters:
T – the result type. The default is
E::value_type
. You can passbig_promote_value_type_t<E>
to avoid overflow in computation.- Returns:
an xexpression
-
template<class T = void, class E, class X, class EVS = std::tuple<evaluation_strategy::lazy_type>, xtl::check_concept<xtl::negation<is_reducer_options<X>>, xtl::negation<xtl::is_integral<std::decay_t<X>>>> = 0>
inline auto xt::nanprod(E &&e, X &&axes, EVS es = EVS()) Product of elements over given axes, replacing NaN with 1.
Returns an xreducer for the sum of elements over given
axes
, replacing nan with 1.- Parameters:
e – an xexpression
axes – the axes along which the sum is performed (optional)
es – evaluation strategy of the reducer (optional)
- Template Parameters:
T – the value type used for internal computation. The default is
E::value_type
.T
is also used for determining the value type of the result, which is the type ofT() * E::value_type()
. You can passbig_promote_value_type_t<E>
to avoid overflow in computation.- Returns:
an xreducer
-
template<class T = void, class E>
inline auto xt::nancumsum(E &&e, std::ptrdiff_t axis) Cumulative sum, replacing nan with 0.
Returns an xaccumulator for the sum of elements over given axis, replacing nan with 0.
- Parameters:
e – an xexpression
axis – the axis along which the elements are accumulated (optional)
- Template Parameters:
T – the value type used for internal computation. The default is
E::value_type
.T
is also used for determining the value type of the result, which is the type ofT() + E::value_type()
. You can passbig_promote_value_type_t<E>
to avoid overflow in computation.- Returns:
an xaccumulator
-
template<class T = void, class E>
inline auto xt::nancumprod(E &&e, std::ptrdiff_t axis) Cumulative product, replacing nan with 1.
Returns an xaccumulator for the product of elements over given axis, replacing nan with 1.
- Parameters:
e – an xexpression
axis – the axis along which the elements are accumulated (optional)
- Template Parameters:
T – the value type used for internal computation. The default is
E::value_type
.T
is also used for determining the value type of the result, which is the type ofT() * E::value_type()
. You can passbig_promote_value_type_t<E>
to avoid overflow in computation.- Returns:
an xaccumulator