49 return std::vector<double>(N, 1. / N);
67 std::vector<double> result(probXY.rows(), 0);
68 for (
idx i = 0; i < static_cast<idx>(probXY.rows()); ++i) {
69 for (
idx j = 0; j < static_cast<idx>(probXY.cols()); ++j) {
70 result[i] += probXY(i, j);
104 template <
typename Container>
106 avg(
const std::vector<double>& prob,
const Container& X,
117 for (
idx i = 0; i < prob.size(); ++i)
118 result += prob[i] * X[i];
133 template <
typename Container>
135 cov(
const dmat& probXY,
const Container& X,
const Container& Y,
141 if (static_cast<idx>(probXY.rows()) != X.size() ||
142 static_cast<idx>(probXY.cols()) != Y.size())
146 std::vector<double> probX =
marginalX(probXY);
147 std::vector<double> probY =
marginalY(probXY);
150 for (
idx i = 0; i < X.size(); ++i) {
151 for (
idx j = 0; j < Y.size(); ++j) {
152 result += probXY(i, j) * X[i] * Y[j];
156 return result -
avg(probX, X) *
avg(probY, Y);
167 template <
typename Container>
169 var(
const std::vector<double>& prob,
const Container& X,
179 Eigen::VectorXd diag(prob.size());
180 for (
idx i = 0; i < prob.size(); ++i)
182 dmat probXX = diag.asDiagonal();
184 return cov(probXX, X, X);
195 template <
typename Container>
197 sigma(
const std::vector<double>& prob,
const Container& X,
207 return std::sqrt(
var(prob, X));
220 template <
typename Container>
222 cor(
const dmat& probXY,
const Container& X,
const Container& Y,
228 if (static_cast<idx>(probXY.rows()) != X.size() ||
229 static_cast<idx>(probXY.cols()) != Y.size())
233 return cov(probXY, X, Y) /
bool check_nonzero_size(const T &x) noexcept
Definition: util.h:123
std::vector< double > uniform(idx N)
Uniform probability distribution vector.
Definition: statistics.h:42
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:69
Quantum++ main namespace.
Definition: codes.h:35
double sigma(const std::vector< double > &prob, const Container &X, typename std::enable_if< is_iterable< Container >::value >::type *=nullptr)
Standard deviation.
Definition: statistics.h:197
Checks whether T is compatible with an STL-like iterable container.
Definition: traits.h:71
bool check_matching_sizes(const T1 &lhs, const T2 &rhs) noexcept
Definition: util.h:129
double var(const std::vector< double > &prob, const Container &X, typename std::enable_if< is_iterable< Container >::value >::type *=nullptr)
Variance.
Definition: statistics.h:169
std::vector< double > marginalY(const dmat &probXY)
Marginal distribution.
Definition: statistics.h:85
Size mismatch exception.
Definition: exception.h:543
std::size_t idx
Non-negative integer index.
Definition: types.h:39
double cor(const dmat &probXY, const Container &X, const Container &Y, typename std::enable_if< is_iterable< Container >::value >::type *=nullptr)
Correlation.
Definition: statistics.h:222
double cov(const dmat &probXY, const Container &X, const Container &Y, typename std::enable_if< is_iterable< Container >::value >::type *=nullptr)
Covariance.
Definition: statistics.h:135
double avg(const std::vector< double > &prob, const Container &X, typename std::enable_if< is_iterable< Container >::value >::type *=nullptr)
Average.
Definition: statistics.h:106
Object has zero size exception.
Definition: exception.h:134