{ 18.9375 40.0 42.8125 } .00001 v~
] unit-test
-{ 1.0986122886681096 } [ { 1 2 3 } entropy ] unit-test
+{ 0x1.02eb63cff3f8p0 } [ { 1 2 3 } entropy ] unit-test
{ 1.0 } [ 0.5 binary-entropy ] unit-test
: cum-max ( seq -- seq' )
[ ?first ] keep [ max dup ] map nip ;
-: entropy ( seq -- n )
- histogram values dup sum '[ _ / dup log * ] map-sum neg ;
+: probabilities ( seq -- probabilities )
+ [ histogram values ] [ length ] bi v/n ;
+
+: entropy ( probabilities -- n )
+ dup sum '[ _ / dup log * ] map-sum neg ;
+
+: maximum-entropy ( probabilities -- n )
+ length log ;
+
+: normalized-entropy ( probabilities -- n )
+ [ entropy ] [ maximum-entropy ] bi / ;
: binary-entropy ( p -- h )
[ dup log * ] [ 1 swap - dup log * ] bi + neg 2 log / ;