module dtree.impurity;

import mir.ndslice : map, slice;
import mir.math : sum, log;


auto gini(P)(P probs) {
    return 1.0 - (probs ^^ 2.0).sum!"fast";
}

auto entropy(P)(P probs) {
    if (probs.sum!"fast" == 0.0) return 0.0;
    return - probs.map!(p => p == 0.0 ? 0.0 : p * log(p)).sum!"fast";
}