lsst.afw gc09b65a310+76be3eb1da
Loading...
Searching...
No Matches
Public Member Functions | List of all members
lsst::afw::math::GaussianProcess< T > Class Template Reference

Stores values of a function sampled on an image and allows you to interpolate the function to unsampled points. More...

#include <GaussianProcess.h>

Public Member Functions

 GaussianProcess (const GaussianProcess &)=delete
 
GaussianProcessoperator= (const GaussianProcess &)=delete
 
 GaussianProcess (GaussianProcess &&)=delete
 
GaussianProcessoperator= (GaussianProcess &&)=delete
 
 GaussianProcess (ndarray::Array< T, 2, 2 > const &dataIn, ndarray::Array< T, 1, 1 > const &ff, std::shared_ptr< Covariogram< T > > const &covarIn)
 This is the constructor you call if you do not wish to normalize the positions of your data points and you have only one function. More...
 
 GaussianProcess (ndarray::Array< T, 2, 2 > const &dataIn, ndarray::Array< T, 1, 1 > const &mn, ndarray::Array< T, 1, 1 > const &mx, ndarray::Array< T, 1, 1 > const &ff, std::shared_ptr< Covariogram< T > > const &covarIn)
 This is the constructor you call if you want the positions of your data points normalized by the span of each dimension and you have only one function. More...
 
 GaussianProcess (ndarray::Array< T, 2, 2 > const &dataIn, ndarray::Array< T, 2, 2 > const &ff, std::shared_ptr< Covariogram< T > > const &covarIn)
 this is the constructor to use in the case of a vector of input functions and an unbounded/unnormalized parameter space More...
 
 GaussianProcess (ndarray::Array< T, 2, 2 > const &dataIn, ndarray::Array< T, 1, 1 > const &mn, ndarray::Array< T, 1, 1 > const &mx, ndarray::Array< T, 2, 2 > const &ff, std::shared_ptr< Covariogram< T > > const &covarIn)
 this is the constructor to use in the case of a vector of input functions using minima and maxima in parameter space More...
 
int getNPoints () const
 return the number of data points stored in the GaussianProcess More...
 
int getDim () const
 return the dimensionality of data points stored in the GaussianProcess More...
 
void getData (ndarray::Array< T, 2, 2 > pts, ndarray::Array< T, 1, 1 > fn, ndarray::Array< int, 1, 1 > indices) const
 Return a sub-sample the data underlying the Gaussian Process. More...
 
void getData (ndarray::Array< T, 2, 2 > pts, ndarray::Array< T, 2, 2 > fn, ndarray::Array< int, 1, 1 > indices) const
 Return a sub-sample the data underlying the Gaussian Process. More...
 
interpolate (ndarray::Array< T, 1, 1 > variance, ndarray::Array< T, 1, 1 > const &vin, int numberOfNeighbors) const
 Interpolate the function value at one point using a specified number of nearest neighbors. More...
 
void interpolate (ndarray::Array< T, 1, 1 > mu, ndarray::Array< T, 1, 1 > variance, ndarray::Array< T, 1, 1 > const &vin, int numberOfNeighbors) const
 This is the version of GaussianProcess::interpolate for a vector of functions. More...
 
selfInterpolate (ndarray::Array< T, 1, 1 > variance, int dex, int numberOfNeighbors) const
 This method will interpolate the function on a data point for purposes of optimizing hyper parameters. More...
 
void selfInterpolate (ndarray::Array< T, 1, 1 > mu, ndarray::Array< T, 1, 1 > variance, int dex, int numberOfNeighbors) const
 The version of selfInterpolate called for a vector of functions. More...
 
void batchInterpolate (ndarray::Array< T, 1, 1 > mu, ndarray::Array< T, 1, 1 > variance, ndarray::Array< T, 2, 2 > const &queries) const
 Interpolate a list of query points using all of the input data (rather than nearest neighbors) More...
 
void batchInterpolate (ndarray::Array< T, 1, 1 > mu, ndarray::Array< T, 2, 2 > const &queries) const
 Interpolate a list of points using all of the data. More...
 
void batchInterpolate (ndarray::Array< T, 2, 2 > mu, ndarray::Array< T, 2, 2 > variance, ndarray::Array< T, 2, 2 > const &queries) const
 This is the version of batchInterpolate (with variances) that is called for a vector of functions. More...
 
void batchInterpolate (ndarray::Array< T, 2, 2 > mu, ndarray::Array< T, 2, 2 > const &queries) const
 This is the version of batchInterpolate (without variances) that is called for a vector of functions. More...
 
void addPoint (ndarray::Array< T, 1, 1 > const &vin, T f)
 Add a point to the pool of data used by GaussianProcess for interpolation. More...
 
void addPoint (ndarray::Array< T, 1, 1 > const &vin, ndarray::Array< T, 1, 1 > const &f)
 This is the version of addPoint that is called for a vector of functions. More...
 
void removePoint (int dex)
 This will remove a point from the data set. More...
 
void setKrigingParameter (T kk)
 Assign a value to the Kriging paramter. More...
 
void setCovariogram (std::shared_ptr< Covariogram< T > > const &covar)
 Assign a different covariogram to this GaussianProcess. More...
 
void setLambda (T lambda)
 set the value of the hyperparameter _lambda More...
 
GaussianProcessTimergetTimes () const
 Give the user acces to _timer, an object keeping track of the time spent on various processes within interpolate. More...
 

Detailed Description

template<typename T>
class lsst::afw::math::GaussianProcess< T >

Stores values of a function sampled on an image and allows you to interpolate the function to unsampled points.

The data will be stored in a KD Tree for easy nearest neighbor searching when interpolating.

The array _function[] will contain the values of the function being interpolated. You can provide a two dimensional array _function[][] if you wish to interpolate a vector of functions. In this case _function[i][j] is the jth function associated with the ith data point. Note: presently, the covariance matrices do not relate elements of _function[i][] to each other, so the variances returned will be identical for all functions evaluated at the same point in parameter space.

_data[i][j] will be the jth component of the ith data point.

_max and _min contain the maximum and minimum values of each dimension in parameter space (if applicable) so that data points can be normalized by _max-_min to keep distances between points reasonable. This is an option specified by calling the relevant constructor.

Definition at line 471 of file GaussianProcess.h.

Constructor & Destructor Documentation

◆ GaussianProcess() [1/6]

template<typename T >
lsst::afw::math::GaussianProcess< T >::GaussianProcess ( const GaussianProcess< T > &  )
delete

◆ GaussianProcess() [2/6]

template<typename T >
lsst::afw::math::GaussianProcess< T >::GaussianProcess ( GaussianProcess< T > &&  )
delete

◆ GaussianProcess() [3/6]

template<typename T >
lsst::afw::math::GaussianProcess< T >::GaussianProcess ( ndarray::Array< T, 2, 2 > const &  dataIn,
ndarray::Array< T, 1, 1 > const &  ff,
std::shared_ptr< Covariogram< T > > const &  covarIn 
)

This is the constructor you call if you do not wish to normalize the positions of your data points and you have only one function.

Parameters
[in]dataInan ndarray containing the data points; the ith row of datain is the ith data point
[in]ffa one-dimensional ndarray containing the values of the scalar function associated with each data point. This is the function you are interpolating
[in]covarInis the input covariogram

Definition at line 751 of file GaussianProcess.cc.

◆ GaussianProcess() [4/6]

template<typename T >
lsst::afw::math::GaussianProcess< T >::GaussianProcess ( ndarray::Array< T, 2, 2 > const &  dataIn,
ndarray::Array< T, 1, 1 > const &  mn,
ndarray::Array< T, 1, 1 > const &  mx,
ndarray::Array< T, 1, 1 > const &  ff,
std::shared_ptr< Covariogram< T > > const &  covarIn 
)

This is the constructor you call if you want the positions of your data points normalized by the span of each dimension and you have only one function.

Parameters
[in]dataInan ndarray containing the data points; the ith row of datain is the ith data point
[in]mna one-dimensional ndarray containing the minimum values of each dimension (for normalizing the positions of data points)
[in]mxa one-dimensional ndarray containing the maximum values of each dimension (for normalizing the positions of data points)
[in]ffa one-dimensional ndarray containing the values of the scalar function associated with each data point. This is the function you are interpolating
[in]covarInis the input covariogram

Note: the member variable _useMaxMin will allow the code to remember which constructor you invoked

Definition at line 786 of file GaussianProcess.cc.

◆ GaussianProcess() [5/6]

template<typename T >
lsst::afw::math::GaussianProcess< T >::GaussianProcess ( ndarray::Array< T, 2, 2 > const &  dataIn,
ndarray::Array< T, 2, 2 > const &  ff,
std::shared_ptr< Covariogram< T > > const &  covarIn 
)

this is the constructor to use in the case of a vector of input functions and an unbounded/unnormalized parameter space

Parameters
[in]dataIncontains the data points, as in other constructors
[in]ffcontains the functions. Each row of ff corresponds to a datapoint. Each column corresponds to a function (ff[i][j] is the jth function associated with the ith data point)
[in]covarInis the input covariogram

Definition at line 837 of file GaussianProcess.cc.

◆ GaussianProcess() [6/6]

template<typename T >
lsst::afw::math::GaussianProcess< T >::GaussianProcess ( ndarray::Array< T, 2, 2 > const &  dataIn,
ndarray::Array< T, 1, 1 > const &  mn,
ndarray::Array< T, 1, 1 > const &  mx,
ndarray::Array< T, 2, 2 > const &  ff,
std::shared_ptr< Covariogram< T > > const &  covarIn 
)

this is the constructor to use in the case of a vector of input functions using minima and maxima in parameter space

Parameters
[in]dataIncontains the data points, as in other constructors
[in]mncontains the minimum allowed values of the parameters in parameter space
[in]mxcontains the maximum allowed values of the parameters in parameter space
[in]ffcontains the functions. Each row of ff corresponds to a datapoint. Each column corresponds to a function (ff[i][j] is the jth function associated with the ith data point)
[in]covarInis the input covariogram

Definition at line 868 of file GaussianProcess.cc.

Member Function Documentation

◆ addPoint() [1/2]

template<typename T >
void lsst::afw::math::GaussianProcess< T >::addPoint ( ndarray::Array< T, 1, 1 > const &  vin,
ndarray::Array< T, 1, 1 > const &  f 
)

This is the version of addPoint that is called for a vector of functions.

Exceptions
pex::exceptions::RuntimeErrorif the tree does not end up properly constructed (the exception is actually thrown by KdTree<T>::addPoint() )

Note: excessive use of addPoint and removePoint can result in an unbalanced KdTree, which will slow down nearest neighbor searches

Definition at line 1907 of file GaussianProcess.cc.

◆ addPoint() [2/2]

template<typename T >
void lsst::afw::math::GaussianProcess< T >::addPoint ( ndarray::Array< T, 1, 1 > const &  vin,
f 
)

Add a point to the pool of data used by GaussianProcess for interpolation.

Parameters
[in]vina one-dimensional ndarray storing the point in parameter space that you are adding
[in]fthe value of the function at that point
Exceptions
pex::exceptions::RuntimeErrorif you call this when you should have called the version taking a vector of functions (below)
pex::exceptions::RuntimeErrorif the tree does not end up properly constructed (the exception is actually thrown by KdTree<T>::addPoint() )

Note: excessive use of addPoint and removePoint can result in an unbalanced KdTree, which will slow down nearest neighbor searches

Definition at line 1862 of file GaussianProcess.cc.

◆ batchInterpolate() [1/4]

template<typename T >
void lsst::afw::math::GaussianProcess< T >::batchInterpolate ( ndarray::Array< T, 1, 1 >  mu,
ndarray::Array< T, 1, 1 >  variance,
ndarray::Array< T, 2, 2 > const &  queries 
) const

Interpolate a list of query points using all of the input data (rather than nearest neighbors)

Parameters
[out]mua 1-dimensional ndarray where the interpolated function values will be stored
[out]variancea 1-dimensional ndarray where the corresponding variances in the function value will be stored
[in]queriesa 2-dimensional ndarray containing the points to be interpolated. queries[i][j] is the jth component of the ith point

This method will attempt to construct a _npts X _npts covariance matrix C and solve the problem Cx=b. Be wary of using it in the case where _npts is very large.

This version of the method will also return variances for all of the query points. That is a very time consuming calculation relative to just returning estimates for the function. Consider calling the version of this method that does not calculate variances (below). The difference in time spent is an order of magnitude for 189 data points and 1,000,000 interpolations.

Definition at line 1488 of file GaussianProcess.cc.

◆ batchInterpolate() [2/4]

template<typename T >
void lsst::afw::math::GaussianProcess< T >::batchInterpolate ( ndarray::Array< T, 1, 1 >  mu,
ndarray::Array< T, 2, 2 > const &  queries 
) const

Interpolate a list of points using all of the data.

Do not return variances for the interpolation.

Parameters
[out]mua 1-dimensional ndarray where the interpolated function values will be stored
[in]queriesa 2-dimensional ndarray containing the points to be interpolated. queries[i][j] is the jth component of the ith point

This method will attempt to construct a _npts X _npts covariance matrix C and solve the problem Cx=b. Be wary of using it in the case where _npts is very large.

This version of the method does not return variances. It is an order of magnitude faster than the version of the method that does return variances (timing done on a case with 189 data points and 1 million query points).

Definition at line 1696 of file GaussianProcess.cc.

◆ batchInterpolate() [3/4]

template<typename T >
void lsst::afw::math::GaussianProcess< T >::batchInterpolate ( ndarray::Array< T, 2, 2 >  mu,
ndarray::Array< T, 2, 2 > const &  queries 
) const

This is the version of batchInterpolate (without variances) that is called for a vector of functions.

Definition at line 1775 of file GaussianProcess.cc.

◆ batchInterpolate() [4/4]

template<typename T >
void lsst::afw::math::GaussianProcess< T >::batchInterpolate ( ndarray::Array< T, 2, 2 >  mu,
ndarray::Array< T, 2, 2 >  variance,
ndarray::Array< T, 2, 2 > const &  queries 
) const

This is the version of batchInterpolate (with variances) that is called for a vector of functions.

Definition at line 1588 of file GaussianProcess.cc.

◆ getData() [1/2]

template<typename T >
void lsst::afw::math::GaussianProcess< T >::getData ( ndarray::Array< T, 2, 2 >  pts,
ndarray::Array< T, 1, 1 >  fn,
ndarray::Array< int, 1, 1 >  indices 
) const

Return a sub-sample the data underlying the Gaussian Process.

Parameters
[out]ptswill contain the data points from the Gaussian Process
[out]fnwill contain the function values from the Gaussian Process
[in]indicesis an array of indices indicating the points to return

Definition at line 929 of file GaussianProcess.cc.

◆ getData() [2/2]

template<typename T >
void lsst::afw::math::GaussianProcess< T >::getData ( ndarray::Array< T, 2, 2 >  pts,
ndarray::Array< T, 2, 2 >  fn,
ndarray::Array< int, 1, 1 >  indices 
) const

Return a sub-sample the data underlying the Gaussian Process.

Parameters
[out]ptswill contain the data points from the Gaussian Process
[out]fnwill contain the function values from the Gaussian Process
[in]indicesis an array of indices indicating the points to return

Definition at line 968 of file GaussianProcess.cc.

◆ getDim()

template<typename T >
int lsst::afw::math::GaussianProcess< T >::getDim

return the dimensionality of data points stored in the GaussianProcess

Definition at line 924 of file GaussianProcess.cc.

◆ getNPoints()

template<typename T >
int lsst::afw::math::GaussianProcess< T >::getNPoints

return the number of data points stored in the GaussianProcess

Definition at line 919 of file GaussianProcess.cc.

◆ getTimes()

template<typename T >
GaussianProcessTimer & lsst::afw::math::GaussianProcess< T >::getTimes

Give the user acces to _timer, an object keeping track of the time spent on various processes within interpolate.

This will return a GaussianProcessTimer object. The user can, for example, see how much time has been spent on Eigen's linear algebra package (see the comments on the GaussianProcessTimer class) using code like

gg=GaussianProcess(....)

ticktock=gg.getTimes()

ticktock.display()

Definition at line 1981 of file GaussianProcess.cc.

◆ interpolate() [1/2]

template<typename T >
void lsst::afw::math::GaussianProcess< T >::interpolate ( ndarray::Array< T, 1, 1 >  mu,
ndarray::Array< T, 1, 1 >  variance,
ndarray::Array< T, 1, 1 > const &  vin,
int  numberOfNeighbors 
) const

This is the version of GaussianProcess::interpolate for a vector of functions.

Parameters
[out]muwill store the vector of interpolated function values
[out]variancewill store the vector of interpolated variances on mu
[in]vinthe point at which you wish to interpolate the functions
[in]numberOfNeighborsis the number of nearest neighbor points to use in the interpolation

Note: Because the variance currently only depends on the covariance function and the covariance function currently does not include any terms relating different elements of mu to each other, all of the elements of variance will be identical

Definition at line 1131 of file GaussianProcess.cc.

◆ interpolate() [2/2]

template<typename T >
T lsst::afw::math::GaussianProcess< T >::interpolate ( ndarray::Array< T, 1, 1 >  variance,
ndarray::Array< T, 1, 1 > const &  vin,
int  numberOfNeighbors 
) const

Interpolate the function value at one point using a specified number of nearest neighbors.

Parameters
[out]variancea one-dimensional ndarray. The value of the variance predicted by the Gaussian process will be stored in the zeroth element
[in]vina one-dimensional ndarray representing the point at which you want to interpolate the function
[in]numberOfNeighborsthe number of nearest neighbors to be used in the interpolation

the interpolated value of the function will be returned at the end of this method

Note: if you used a normalized parameter space, you should not normalize vin before inputting. The code will remember that you want a normalized parameter space, and will apply the normalization when you call interpolate

Definition at line 1009 of file GaussianProcess.cc.

◆ operator=() [1/2]

template<typename T >
GaussianProcess & lsst::afw::math::GaussianProcess< T >::operator= ( const GaussianProcess< T > &  )
delete

◆ operator=() [2/2]

template<typename T >
GaussianProcess & lsst::afw::math::GaussianProcess< T >::operator= ( GaussianProcess< T > &&  )
delete

◆ removePoint()

template<typename T >
void lsst::afw::math::GaussianProcess< T >::removePoint ( int  dex)

This will remove a point from the data set.

Parameters
[in]dexthe index of the point you want to remove from your data set
Exceptions
pex::exceptions::RuntimeErrorif the tree does not end up properly constructed (the exception is actually thrown by KdTree<T>::removePoint() )

Note: excessive use of addPoint and removePoint can result in an unbalanced KdTree, which will slow down nearest neighbor searches

Definition at line 1952 of file GaussianProcess.cc.

◆ selfInterpolate() [1/2]

template<typename T >
void lsst::afw::math::GaussianProcess< T >::selfInterpolate ( ndarray::Array< T, 1, 1 >  mu,
ndarray::Array< T, 1, 1 >  variance,
int  dex,
int  numberOfNeighbors 
) const

The version of selfInterpolate called for a vector of functions.

Parameters
[out]muthis is where the interpolated function values will be stored
[out]variancethe variance on mu will be stored here
[in]dexthe index of the point you wish to interpolate
[in]numberOfNeighborsthe number of nearest neighbors to use in the interpolation
Exceptions
pex::exceptions::RuntimeErrorif the nearest neighbor search does not find the data point itself as the nearest neighbor

Definition at line 1367 of file GaussianProcess.cc.

◆ selfInterpolate() [2/2]

template<typename T >
T lsst::afw::math::GaussianProcess< T >::selfInterpolate ( ndarray::Array< T, 1, 1 >  variance,
int  dex,
int  numberOfNeighbors 
) const

This method will interpolate the function on a data point for purposes of optimizing hyper parameters.

Parameters
[out]variancea one-dimensional ndarray. The value of the variance predicted by the Gaussian process will be stored in the zeroth element
[in]dexthe index of the point you wish to self interpolate
[in]numberOfNeighborsthe number of nearest neighbors to be used in the interpolation
Exceptions
pex::exceptions::RuntimeErrorif the nearest neighbor search does not find the data point itself as the nearest neighbor

The interpolated value of the function will be returned at the end of this method

This method ignores the point on which you are interpolating when requesting nearest neighbors

Definition at line 1244 of file GaussianProcess.cc.

◆ setCovariogram()

template<typename T >
void lsst::afw::math::GaussianProcess< T >::setCovariogram ( std::shared_ptr< Covariogram< T > > const &  covar)

Assign a different covariogram to this GaussianProcess.

Parameters
[in]covarthe Covariogram object that you wish to assign

Definition at line 1971 of file GaussianProcess.cc.

◆ setKrigingParameter()

template<typename T >
void lsst::afw::math::GaussianProcess< T >::setKrigingParameter ( kk)

Assign a value to the Kriging paramter.

Parameters
[in]kkthe value assigned to the Kriging parameters

Definition at line 1966 of file GaussianProcess.cc.

◆ setLambda()

template<typename T >
void lsst::afw::math::GaussianProcess< T >::setLambda ( lambda)

set the value of the hyperparameter _lambda

Parameters
[in]lambdathe value you want assigned to _lambda

_lambda is a parameter meant to represent the characteristic variance of the function you are interpolating. Currently, it is a scalar such that all data points must have the same characteristic variance. Future iterations of the code may want to promote _lambda to an array so that different data points can have different variances.

Definition at line 1976 of file GaussianProcess.cc.


The documentation for this class was generated from the following files: