Function entropy

Calculates the joint entropy of a set of observations. Each input range represents a vector of observations. If only one range is given, this reduces to the plain old entropy. Input range must have a length.

double entropy(T) (
  T data
)
if (isIterable!T);

Note

This function specializes if ElementType!(T) is a byte, ubyte, or char, resulting in a much faster entropy calculation. When possible, try to provide data in the form of a byte, ubyte, or char.

Examples

int[] foo = [1, 1, 1, 2, 2, 2, 3, 3, 3];
double entropyFoo = entropy(foo);  // Plain old entropy of foo.
assert(approxEqual(entropyFoo, log2(3)));
int[] bar = [1, 2, 3, 1, 2, 3, 1, 2, 3];
double HFooBar = entropy(joint(foo, bar));  // Joint entropy of foo and bar.
assert(approxEqual(HFooBar, log2(9)));