22 #ifndef EDSP_STATISTICAL_GENERALIZED_MEAN_H 23 #define EDSP_STATISTICAL_GENERALIZED_MEAN_H 26 #include <edsp/meta/iterator.hpp> 29 namespace edsp {
namespace statistics {
44 template <
typename ForwardIt,
typename Integer>
45 constexpr meta::value_type_t<ForwardIt>
generalized_mean(ForwardIt first, ForwardIt last, Integer beta) {
46 using input_t = meta::value_type_t<ForwardIt>;
47 const auto b =
static_cast<int>(beta);
48 const auto predicate = [b](
const input_t prev,
const input_t current) {
49 return static_cast<input_t
>(prev + std::pow(current, b));
51 const input_t accumulated = std::accumulate(first, last, static_cast<input_t>(0), predicate);
52 const input_t temp = accumulated /
static_cast<input_t
>(
std::distance(first, last));
53 return std::pow(temp,
math::inv(static_cast<input_t>(b)));
58 #endif // EDSP_STATISTICAL_GENERALIZED_MEAN_H constexpr meta::value_type_t< ForwardIt > generalized_mean(ForwardIt first, ForwardIt last, Integer beta)
Computes the generalized mean of the range [first, last)
Definition: generalized_mean.hpp:45
constexpr T inv(T x)
Computes the inverse value of the input number.
Definition: numeric.hpp:208
constexpr T distance(T x, T y) noexcept
Computes the distance between x and y.
Definition: numeric.hpp:328
Definition: amplifier.hpp:29