Add a static method to actually sample
parent
a25378abe7
commit
d2f6224b84
|
|
@ -22,14 +22,18 @@ namespace gtsam {
|
|||
/* ************************************************************************* */
|
||||
Sampler::Sampler(const noiseModel::Diagonal::shared_ptr& model,
|
||||
uint_fast64_t seed)
|
||||
: model_(model), generator_(seed) {}
|
||||
: model_(model), generator_(seed) {
|
||||
if (!model) {
|
||||
throw std::invalid_argument("Sampler::Sampler needs a non-null model.");
|
||||
}
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
Sampler::Sampler(const Vector& sigmas, uint_fast64_t seed)
|
||||
: model_(noiseModel::Diagonal::Sigmas(sigmas, true)), generator_(seed) {}
|
||||
|
||||
/* ************************************************************************* */
|
||||
Vector Sampler::sampleDiagonal(const Vector& sigmas) const {
|
||||
Vector Sampler::sampleDiagonal(const Vector& sigmas, std::mt19937_64* rng) {
|
||||
size_t d = sigmas.size();
|
||||
Vector result(d);
|
||||
for (size_t i = 0; i < d; i++) {
|
||||
|
|
@ -39,14 +43,18 @@ Vector Sampler::sampleDiagonal(const Vector& sigmas) const {
|
|||
if (sigma == 0.0) {
|
||||
result(i) = 0.0;
|
||||
} else {
|
||||
typedef std::normal_distribution<double> Normal;
|
||||
Normal dist(0.0, sigma);
|
||||
result(i) = dist(generator_);
|
||||
std::normal_distribution<double> dist(0.0, sigma);
|
||||
result(i) = dist(*rng);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
Vector Sampler::sampleDiagonal(const Vector& sigmas) const {
|
||||
return sampleDiagonal(sigmas, &generator_);
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
Vector Sampler::sample() const {
|
||||
assert(model_.get());
|
||||
|
|
|
|||
|
|
@ -63,15 +63,9 @@ class GTSAM_EXPORT Sampler {
|
|||
/// @name access functions
|
||||
/// @{
|
||||
|
||||
size_t dim() const {
|
||||
assert(model_.get());
|
||||
return model_->dim();
|
||||
}
|
||||
size_t dim() const { return model_->dim(); }
|
||||
|
||||
Vector sigmas() const {
|
||||
assert(model_.get());
|
||||
return model_->sigmas();
|
||||
}
|
||||
Vector sigmas() const { return model_->sigmas(); }
|
||||
|
||||
const noiseModel::Diagonal::shared_ptr& model() const { return model_; }
|
||||
|
||||
|
|
@ -82,6 +76,8 @@ class GTSAM_EXPORT Sampler {
|
|||
/// sample from distribution
|
||||
Vector sample() const;
|
||||
|
||||
/// sample with given random number generator
|
||||
static Vector sampleDiagonal(const Vector& sigmas, std::mt19937_64* rng);
|
||||
/// @}
|
||||
|
||||
protected:
|
||||
|
|
|
|||
Loading…
Reference in New Issue