add helpful constructors

release/4.3a0
Varun Agrawal 2025-01-04 05:27:30 -05:00
parent bd30bef1a3
commit f9e3280d75
2 changed files with 38 additions and 8 deletions

View File

@ -50,6 +50,19 @@ TableDistribution::TableDistribution(
table_(TableFactor(keys, potentials)) {} table_(TableFactor(keys, potentials)) {}
/* ************************************************************************** */ /* ************************************************************************** */
TableDistribution::TableDistribution(const DiscreteKeys& keys,
const std::vector<double>& potentials)
: BaseConditional(keys.size(), keys, DecisionTreeFactor(keys, ADT())),
table_(TableFactor(keys, potentials)) {}
/* ************************************************************************** */
TableDistribution::TableDistribution(const DiscreteKeys& keys,
const std::string& potentials)
: BaseConditional(keys.size(), keys, DecisionTreeFactor(keys, ADT())),
table_(TableFactor(keys, potentials)) {}
/* **************************************************************************
*/
TableDistribution::TableDistribution(const TableFactor& joint, TableDistribution::TableDistribution(const TableFactor& joint,
const TableFactor& marginal) const TableFactor& marginal)
: BaseConditional(joint.size() - marginal.size(), : BaseConditional(joint.size() - marginal.size(),
@ -72,12 +85,6 @@ void TableDistribution::print(const string& s,
for (const_iterator it = beginFrontals(); it != endFrontals(); ++it) { for (const_iterator it = beginFrontals(); it != endFrontals(); ++it) {
cout << formatter(*it) << " "; cout << formatter(*it) << " ";
} }
if (nrParents()) {
cout << "| ";
for (const_iterator it = beginParents(); it != endParents(); ++it) {
cout << formatter(*it) << " ";
}
}
cout << "):\n"; cout << "):\n";
table_.print("", formatter); table_.print("", formatter);
cout << endl; cout << endl;

View File

@ -62,12 +62,35 @@ class GTSAM_EXPORT TableDistribution : public DiscreteConditional {
TableDistribution(const TableFactor& f); TableDistribution(const TableFactor& f);
/** /**
* Construct from DiscreteKeys and SparseVector, taking the first * Construct from DiscreteKeys and SparseVector.
* `nFrontals` keys as frontals, in the order given.
*/ */
TableDistribution(const DiscreteKeys& keys, TableDistribution(const DiscreteKeys& keys,
const Eigen::SparseVector<double>& potentials); const Eigen::SparseVector<double>& potentials);
/**
* Construct from DiscreteKeys and std::vector.
*/
TableDistribution(const DiscreteKeys& keys,
const std::vector<double>& potentials);
/**
* Construct from single DiscreteKey and std::vector.
*/
TableDistribution(const DiscreteKey& key,
const std::vector<double>& potentials)
: TableDistribution(DiscreteKeys(key), potentials) {}
/**
* Construct from DiscreteKey and std::string.
*/
TableDistribution(const DiscreteKeys& key, const std::string& potentials);
/**
* Construct from single DiscreteKey and std::string.
*/
TableDistribution(const DiscreteKey& key, const std::string& potentials)
: TableDistribution(DiscreteKeys(key), potentials) {}
/** /**
* @brief construct P(X|Y) = f(X,Y)/f(Y) from f(X,Y) and f(Y) * @brief construct P(X|Y) = f(X,Y)/f(Y) from f(X,Y) and f(Y)
* Assumes but *does not check* that f(Y)=sum_X f(X,Y). * Assumes but *does not check* that f(Y)=sum_X f(X,Y).