49 return std::vector<double>(N, 1. / N);
68 std::vector<double> result(probXY.rows(), 0);
69 for (
idx i = 0; i < static_cast<idx>(probXY.rows()); ++i)
71 for (
idx j = 0; j < static_cast<idx>(probXY.cols()); ++j)
73 result[i] += probXY(i, j);
108 template<
typename Container>
109 double avg(
const std::vector<double>& prob,
const Container& X)
120 for (
idx i = 0; i < prob.size(); ++i)
121 result += prob[i] * X[i];
136 template<
typename Container>
145 if (static_cast<idx>(probXY.rows()) != X.size() ||
146 static_cast<idx>(probXY.cols()) != Y.size())
150 std::vector<double> probX =
marginalX(probXY);
151 std::vector<double> probY =
marginalY(probXY);
154 for (
idx i = 0; i < X.size(); ++i)
156 for (
idx j = 0; j < Y.size(); ++j)
158 result += probXY(i, j) * X[i] * Y[j];
162 return result -
avg(probX, X) *
avg(probY, Y);
173 template<
typename Container>
174 double var(
const std::vector<double>& prob,
const Container& X)
184 Eigen::VectorXd diag(prob.size());
185 for (
idx i = 0; i < prob.size(); ++i)
187 dmat probXX = diag.asDiagonal();
189 return cov(probXX, X, X);
200 template<
typename Container>
201 double sigma(
const std::vector<double>& prob,
const Container& X)
211 return std::sqrt(
var(prob, X));
224 template<
typename Container>
233 if (static_cast<idx>(probXY.rows()) != X.size() ||
234 static_cast<idx>(probXY.cols()) != Y.size())
std::vector< double > uniform(idx N)
Uniform probability distribution vector.
Definition: statistics.h:41
bool _check_matching_sizes(const T1 &lhs, const T2 &rhs) noexcept
Definition: util.h:120
std::vector< double > marginalX(const dmat &probXY)
Marginal distribution.
Definition: statistics.h:60
Eigen::MatrixXd dmat
Real (double precision) dynamic Eigen matrix.
Definition: types.h:71
double cov(const dmat &probXY, const Container &X, const Container &Y)
Covariance.
Definition: statistics.h:137
Quantum++ main namespace.
Definition: codes.h:30
double var(const std::vector< double > &prob, const Container &X)
Variance.
Definition: statistics.h:174
double avg(const std::vector< double > &prob, const Container &X)
Average.
Definition: statistics.h:109
double sigma(const std::vector< double > &prob, const Container &X)
Standard deviation.
Definition: statistics.h:201
Generates custom exceptions, used when validating function parameters.
Definition: exception.h:39
bool _check_nonzero_size(const T &x) noexcept
Definition: util.h:113
std::vector< double > marginalY(const dmat &probXY)
Marginal distribution.
Definition: statistics.h:88
std::size_t idx
Non-negative integer index.
Definition: types.h:36
double cor(const dmat &probXY, const Container &X, const Container &Y)
Correlation.
Definition: statistics.h:225