Skip to content

Commit bc16cdd

Browse files
committed
Fix performance issue with nanstd and nanvar
1 parent 54dbb82 commit bc16cdd

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

include/xtensor/xmath.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2610,8 +2610,8 @@ namespace detail {
26102610
XTL_REQUIRES(is_reducer_options<EVS>)>
26112611
inline auto nanvar(E&& e, EVS es = EVS())
26122612
{
2613-
decltype(auto) sc = detail::shared_forward<E>(e);
2614-
return nanmean<T>(square(sc - nanmean<T>(sc)), es);
2613+
auto cached_mean = nanmean<T>(e, es)();
2614+
return nanmean<T>(square(std::forward<E>(e) - cached_mean), es);
26152615
}
26162616

26172617
template <class T = void, class E, class EVS = DEFAULT_STRATEGY_REDUCERS,
@@ -2648,7 +2648,7 @@ namespace detail {
26482648
// note: forcing copy of first axes argument -- is there a better solution?
26492649
auto axes_copy = axes;
26502650
using result_type = typename std::conditional_t<std::is_same<T, void>::value, double, T>;
2651-
auto inner_mean = nanmean<result_type>(sc, std::move(axes_copy));
2651+
auto inner_mean = eval(nanmean<result_type>(sc, std::move(axes_copy), evaluation_strategy::immediate));
26522652

26532653
// fake keep_dims = 1
26542654
auto keep_dim_shape = e.shape();

0 commit comments

Comments
 (0)