Quick Start
Scistats extends the numeric facilities of the standard library to include statistics that work with iterators and ranges. This means you can do things like:
std::vector<int> v{/*...*/};
float m = scistats::mean(v);
or
std::vector<int> v{/*...*/};
float s = scistats::stddev(v); //
or
std::vector<int> v1{/*...*/};
std::vector<int> v2{/*...*/};
float c = scistats::cov(v); // covariance
or
std::vector<int> v{/*...*/};
float p = scistats::t_test(v); // student's t hypothesis test
All algorithms allow execution policies and iterators. So you can do
std::vector<int> v{/*...*/};
float m = scistats::mean(scistats::execution::par, v);
to calculate your average in parallel. Or
std::vector<int> v{/*...*/};
float m = scistats::mean(scistats::execution::seq, v);
to explicitly tell scistats you don’t want that to be calculated in parallel. If no execution policy is provided, scistats will choose a policy according to the input size.
As usual, you can also work directly with iterators, so
std::vector<int> v{/*...*/};
float m = scistats::mean(v.begin(), v.end();
also works.
Note that, when needed, the result type gets promoted to float
. If the result for a given statistic needs to be floating point, scistats will always promote an integer input type to a corresponding floating type large enough to keep the results without losing precision.