3 #ifndef FORPY_IMPURITIES_TSALLISENTROPY_H_ 4 #define FORPY_IMPURITIES_TSALLISENTROPY_H_ 7 #include "../util/serialization/basics.h" 13 #include "../util/checks.h" 14 #include "../util/exponentials.h" 41 inline float operator()(
const float *class_members_numbers,
const size_t &n,
42 const float &fsum)
const {
46 FASSERT(static_cast<float>(std::accumulate(class_members_numbers,
47 class_members_numbers + n,
48 static_cast<float>(0))) == fsum);
49 if (fsum == 0.f)
return 0.f;
50 float entropy_sum = 1.f;
52 if (ceilf(
q) ==
q || floorf(
q) ==
q) {
53 const uint whole_q =
static_cast<uint>(
q);
55 for (
size_t i = 0; i < n; ++i) {
56 quot = *(class_members_numbers++) / fsum;
57 entropy_sum -=
fpowi(quot, whole_q);
61 for (
size_t i = 0; i < n; ++i) {
62 quot = *(class_members_numbers++) / fsum;
63 entropy_sum -= powf(quot,
q);
66 return entropy_sum / (
q - 1.f);
69 inline friend std::ostream &
operator<<(std::ostream &stream,
71 stream <<
"forpy::TsallisEntropy[q=" <<
self.get_q() <<
"]";
90 template <
class Archive>
92 ar(cereal::make_nvp(
"base", cereal::base_class<IEntropyFunction>(
this)),
104 #endif // FORPY_IMPURITIES_TSALLISENTROPY_H_ float operator()(const float *class_members_numbers, const size_t &n, const float &fsum) const
std::unique_ptr< ShannonEntropy > shannon_entropy
bool operator==(const IEntropyFunction &rhs) const
float fpowi(float base, unsigned int exp)
Computes a float power by an unsigned int.
CEREAL_REGISTER_TYPE(forpy::TsallisEntropy)
Computes the Tsallis entropy.
std::unique_ptr< InducedEntropy > induced_p
TsallisEntropy()
DON'T USE. Non-initializing constructor for serialization purposes.
void serialize(Archive &ar, const uint &)
Interface for an entropy calculation functor.
#define FASSERT(condition)
Computes the classical Shannon-Entropy.
friend std::ostream & operator<<(std::ostream &stream, const TsallisEntropy &self)
Computes the induced p entropy.
DISALLOW_COPY_AND_ASSIGN(TsallisEntropy)
friend class cereal::access
unsigned int uint
Convenience typedef for unsigned int.