|
Go to the documentation of this file. 1 #ifndef NPSTAT_LOCALPOLYFILTERND_HH_
2 #define NPSTAT_LOCALPOLYFILTERND_HH_
18 #include "geners/ClassId.hh"
19 #include "geners/CPP11_auto_ptr.hh"
27 typedef ArrayND<double> PolyFilterND;
30 template < unsigned MaxDeg>
34 enum {deg_size = MaxDeg};
69 template < class Array>
71 const Array& weight, bool mirrorWeight,
81 inline unsigned dim() const { return bins_.rank();}
82 inline unsigned maxDegree() const { return maxDegree_;}
84 double taper( unsigned degree) const;
89 unsigned lenIndex) const;
98 template < class Triplet>
108 const unsigned* index, unsigned lenIndex) const;
113 template < class Array>
115 { return bins_.isShapeCompatible(in);}
118 template < class ArrIn, class ArrOut>
119 void filter( const ArrIn& in, ArrOut* out) const;
128 template < class ArrIn, class ArrOut>
131 template < unsigned MaxDeg2>
134 template < unsigned MaxDeg2>
136 { return !(* this == r);}
139 inline virtual gs::ClassId classId() const { return gs::ClassId(* this);}
140 virtual bool write(std::ostream& os) const;
142 static const char* classname();
143 static inline unsigned version() { return 1;}
146 static inline unsigned classMaxDegree() { return MaxDeg;}
149 typedef std::map<ArrayRange, PolyFilterND*> PolyMap;
153 template < class Array>
154 void initialize( const double* itaper, unsigned maxDegree,
155 const Array& inweight, bool mirrorWeight);
158 void copyFilters( const LocalPolyFilterND& r);
163 ArrayND<PolyFilterND*> bins_;
164 std::vector<unsigned> filterCenters_;
165 PolyFilterND* centerFilter_;
167 mutable std::vector<unsigned> indexBuf_;
169 template < unsigned StackLen, unsigned StackDim>
170 PolyFilterND* buildFilter( const ArrayND<double,StackLen,StackDim>& w,
171 const unsigned* center,
172 const double* steps, unsigned nSteps);
174 template < unsigned StackLen, unsigned StackDim>
175 void createFiltersLoop( unsigned level, unsigned long idxData,
176 const ArrayND<double,StackLen,StackDim>& weight,
177 ArrayRange& range, unsigned* center,
178 const double* steps, unsigned nSteps);
180 template < typename Tin, unsigned StackLen, unsigned StackDim,
181 typename Tout, unsigned StackLen2, unsigned StackDim2>
182 void filterLoop( unsigned level, unsigned long idxData,
183 const ArrayND<Tin,StackLen,StackDim>& in,
184 ArrayND<Tout,StackLen2,StackDim2>* out,
185 unsigned* shift) const;
187 template < typename Tin, unsigned StackLen, unsigned StackDim>
188 long double filterInnerLoop( unsigned level,
189 const ArrayND<Tin,StackLen,StackDim>& in,
190 const PolyFilterND& poly,
191 const unsigned* shift,
192 unsigned long idxData,
193 unsigned long idxPoly) const;
195 void matrixLoop( unsigned level, unsigned long idxData,
196 Matrix<double>* out, unsigned* shift) const;
198 void matrixInnerLoop( unsigned level, Matrix<double>* out,
199 unsigned long rowNumber,
200 const PolyFilterND& poly, const unsigned* shift,
201 unsigned long idxData, unsigned long idxPoly) const;
203 template < class Triplet>
204 void sparseMatrixLoop( unsigned level, unsigned long idxData,
205 std::vector<Triplet>* out, unsigned* shift) const;
207 template < class Triplet>
208 void sparseMatrixInnerLoop( unsigned level, std::vector<Triplet>* out,
209 unsigned long rowNumber,
210 const PolyFilterND& poly, const unsigned* shift,
211 unsigned long idxData, unsigned long idxPoly) const;
213 template < class ArrOut>
214 void runConvolution( double w, unsigned long linearBin,
215 ArrOut* out, unsigned* cornerBuf, unsigned* indexBuf,
216 const unsigned* zeroBuf) const;
218 static std::string generateClassName();
223 const ArrayND<double>& inweight,
226 : taper_(0), wshape_(inweight.shape()), bins_( dataShape),
227 centerFilter_(0), maxDegree_(maxDegree)
229 initialize(itaper, maxDegree, inweight, mirrorWeight);
235 #include "npstat/stat/LocalPolyFilterND.icc"
Interface definition for multivariate smoothers that can be cross-validated.
Arbitrary-dimensional array template.
Definition: LocalPolyFilterND.hh:32
Matrix< double > getFilterMatrix() const
CPP11_auto_ptr< std::vector< Triplet > > sparseFilterTriplets() const
bool isCompatible(const Array &in) const Definition: LocalPolyFilterND.hh:114
double selfContribution(const unsigned *index, unsigned lenIndex) const
unsigned dim() const Definition: LocalPolyFilterND.hh:81
void convolve(const ArrIn &in, ArrOut *out) const
void filter(const ArrIn &in, ArrOut *out) const
const PolyFilterND & getFilter(const unsigned *index, unsigned lenIndex) const
const PolyFilterND & linearGetFilter(unsigned long index) const
ArrayShape dataShape() const Definition: LocalPolyFilterND.hh:83
LocalPolyFilterND(const double *taper, unsigned maxDegree, const Array &weight, bool mirrorWeight, const ArrayShape &dataShape)
double linearSelfContribution(unsigned long index) const
Definition: AbsArrayProjector.hh:14
std::vector< unsigned > ArrayShape Definition: ArrayShape.hh:21
Definition: AbsPolyFilterND.hh:27
|