3#ifndef cMHN_UTILITY_GENERATE_THETA_H
4#define cMHN_UTILITY_GENERATE_THETA_H
32 template<pRC::Size D,
class T = pRC::Float<>>
34 pRC::Float<>
const &fullness = 0.5,
T const &diagonalMean = -2,
35 T const &diagonalStd = 2,
T const &offDiagonalMean = 0,
36 T const &offDiagonalB = 0.75)
39 pRC::GaussianDistribution<T> diagonalDist(diagonalMean, diagonalStd);
41 pRC::random<pRC::Tensor<T, D, D>>(rng, diagonalDist);
44 pRC::LaplaceDistribution<T> offDiagonalDist(offDiagonalMean,
46 auto offDiagonalTheta =
47 pRC::random<pRC::Tensor<T, D, D>>(rng, offDiagonalDist);
51 eval(diagonal(diagonalTheta) + offDiagonal(offDiagonalTheta));
54 pRC::UniformDistribution<pRC::Float<>> sparsityDist;
55 auto allowedPlaces = offDiagonal(
56 pRC::random<pRC::Tensor<pRC::Float<>,
D,
D>>(rng, sparsityDist));
57 for(pRC::Index i = 0; i <
D; ++i)
59 for(pRC::Index j = 0; j <
D; ++j)
61 if(allowedPlaces(i, j) > fullness)
63 theta(i, j) = pRC::zero();
95 template<pRC::Size D,
class T = pRC::Float<>>
97 T const &diagonalMean = -2,
T const &diagonalStd = 2,
98 T const &offDiagonalMean = 0,
T const &offDiagonalB = 0.75)
101 pRC::SeedSequence seq(8, 16);
102 pRC::RandomEngine rng(seq);
104 return generateTheta<D>(rng, fullness, diagonalMean, diagonalStd,
105 offDiagonalMean, offDiagonalB);
pRC::Size const D
Definition: CalculatePThetaTests.cpp:9
pRC::Float<> T
Definition: externs_nonTT.hpp:1
Definition: calculate_pTheta.hpp:15
static auto generateTheta(pRC::RandomEngine &rng, pRC::Float<> const &fullness=0.5, T const &diagonalMean=-2, T const &diagonalStd=2, T const &offDiagonalMean=0, T const &offDiagonalB=0.75)
Generates a random theta matrix according to given distributions, and with given fullness.
Definition: generate_theta.hpp:33