3 #ifndef FORPY_IMPURITIES_SHANNONENTROPY_H_ 4 #define FORPY_IMPURITIES_SHANNONENTROPY_H_ 8 #include "../util/serialization/basics.h" 14 #include "../util/checks.h" 15 #include "../util/exponentials.h" 39 inline virtual float operator()(
const float *class_members_numbers,
40 const size_t &n,
const float &fsum)
const {
42 FASSERT(static_cast<float>(std::accumulate(class_members_numbers,
43 class_members_numbers + n,
44 static_cast<float>(0))) == fsum);
46 if (fsum == 0.f)
return 0.f;
48 float entropy_sum = 0.f;
51 for (
size_t i = 0; i < n; ++i, class_members_numbers++) {
54 if (*class_members_numbers == 0.f)
continue;
56 quot = *class_members_numbers / fsum;
57 entropy_sum -= quot * log2f(quot);
62 inline friend std::ostream &
operator<<(std::ostream &stream,
64 stream <<
"forpy::ShannonEntropy";
73 template <
class Archive>
75 ar(cereal::make_nvp(
"base", cereal::base_class<IEntropyFunction>(
this)));
81 #endif // FORPY_IMPURITIES_SHANNONENTROPY_H_
CEREAL_REGISTER_TYPE(forpy::ShannonEntropy)
Interface for an entropy calculation functor.
#define FASSERT(condition)
Computes the classical Shannon-Entropy.
friend class cereal::access
virtual float operator()(const float *class_members_numbers, const size_t &n, const float &fsum) const
void serialize(Archive &ar, const uint &)
friend std::ostream & operator<<(std::ostream &stream, const ShannonEntropy &)
DISALLOW_COPY_AND_ASSIGN(ShannonEntropy)
bool operator==(const IEntropyFunction &rhs) const
unsigned int uint
Convenience typedef for unsigned int.