1 #ifndef NPSTAT_GRIDINTERPOLATEDDISTRIBUTION_HH_
2 #define NPSTAT_GRIDINTERPOLATEDDISTRIBUTION_HH_
46 unsigned distributionDimension,
48 bool useNearestGridCellOnly =
false);
76 bool assumeOwnership=
true);
84 const unsigned* cell,
unsigned lenCell)
const;
108 inline unsigned nAxes()
const {
return nAxes_;}
109 inline const GridAxis& getAxis(
const unsigned i)
const
110 {
return axes_.at(i);}
111 inline unsigned long nDistros()
const {
return interpolated_.length();}
112 inline ArrayShape gridShape()
const {
return interpolated_.shape();}
113 inline bool interpolatingCopulas()
const {
return interpCopulas_;}
114 inline bool usingSingleCell()
const {
return useNearestOnly_;}
120 void unitMap(
const double* rnd,
unsigned len,
double* x)
const;
131 double marginalCdf(
unsigned idim,
double x)
const;
132 double marginalExceedance(
unsigned idim,
double x)
const;
133 double marginalQuantile(
unsigned idim,
double x)
const;
134 double copulaDensity(
const double* x,
unsigned dim)
const;
135 double productOfTheMarginals(
const double* x,
unsigned dim)
const;
140 virtual gs::ClassId
classId()
const {
return gs::ClassId(*
this);}
141 virtual bool write(std::ostream& of)
const;
145 static inline const char* classname()
146 {
return "npstat::GridInterpolatedDistribution";}
149 static inline unsigned version() {
return 3;}
153 const gs::ClassId&
id, std::istream& in);
156 virtual bool isEqual(
const AbsDistributionND& r)
const;
161 void releaseDistros();
163 void rebuildInterpolator();
164 void setGridCoordsSingle(
const double* coords);
165 void setGridCoordsInterpolating(
const double* coords);
166 void checkReady()
const;
169 std::vector<GridAxis> axes_;
170 std::vector<unsigned> cellBuf_;
171 ArrayND<AbsDistributionND*> interpolated_;
172 AbsInterpolationAlgoND* interpolator_;
173 AbsDistributionND* single_;
177 bool useNearestOnly_;
181 void setGridDistro_2(
const unsigned* cell,
unsigned lenCell,
182 AbsDistributionND* distro)
186 void setLinearDistro_2(
unsigned long idx, AbsDistributionND* distro)
Interface definition for multivariate continuous statistical distributions.
Interface for multidimensional interpolation between densities.
Arbitrary-dimensional array template.
Non-uniformly spaced coordinate sets for use in constructing rectangular grids.
Definition: AbsDistributionND.hh:26
unsigned dim() const
Definition: AbsDistributionND.hh:51
Definition: GridAxis.hh:31
Definition: GridInterpolatedDistribution.hh:30
const AbsDistributionND * getGridDistro(const unsigned *cell, unsigned lenCell) const
GridInterpolatedDistribution(const std::vector< GridAxis > &axes, unsigned distributionDimension, bool interpolateCopulas, bool useNearestGridCellOnly=false)
virtual gs::ClassId classId() const
Definition: GridInterpolatedDistribution.hh:140
double marginalDensity(unsigned idim, double x) const
unsigned nAxes() const
Definition: GridInterpolatedDistribution.hh:108
void useSingleCell(bool b)
double density(const double *x, unsigned dim) const
void unitMap(const double *rnd, unsigned len, double *x) const
void setGridDistro(const unsigned *cell, unsigned lenCell, AbsDistributionND *distro, bool assumeOwnership=true)
bool mappedByQuantiles() const
void interpolateCopulas(bool b)
void setLinearDistro(unsigned long idx, AbsDistributionND *distro, bool assumeOwnership=true)
void setGridCoords(const double *coords, unsigned lenCoords)
virtual GridInterpolatedDistribution * clone() const
Definition: GridInterpolatedDistribution.hh:57
const AbsDistributionND * getLinearDistro(unsigned long idx) const
Definition: AbsArrayProjector.hh:14
std::vector< unsigned > ArrayShape
Definition: ArrayShape.hh:21