hrectbound.hpp
Go to the documentation of this file.
1 
14 #ifndef MLPACK_CORE_TREE_HRECTBOUND_HPP
15 #define MLPACK_CORE_TREE_HRECTBOUND_HPP
16 
17 #include <mlpack/prereqs.hpp>
20 #include "bound_traits.hpp"
21 
22 namespace mlpack {
23 namespace bound {
24 
25 namespace meta {
26 
29 template<typename MetricType>
30 struct IsLMetric
31 {
32  static const bool Value = false;
33 };
34 
36 template<int Power, bool TakeRoot>
37 struct IsLMetric<metric::LMetric<Power, TakeRoot>>
38 {
39  static const bool Value = true;
40 };
41 
42 } // namespace meta
43 
52 template<typename MetricType = metric::LMetric<2, true>,
53  typename ElemType = double>
55 {
56  // It is required that HRectBound have an LMetric as the given MetricType.
57  static_assert(meta::IsLMetric<MetricType>::Value == true,
58  "HRectBound can only be used with the LMetric<> metric type.");
59 
60  public:
64  HRectBound();
65 
72  HRectBound(const size_t dimension);
73 
75  HRectBound(const HRectBound& other);
77  HRectBound& operator=(const HRectBound& other);
78 
80  HRectBound(HRectBound&& other);
81 
83  ~HRectBound();
84 
89  void Clear();
90 
92  size_t Dim() const { return dim; }
93 
96  math::RangeType<ElemType>& operator[](const size_t i) { return bounds[i]; }
98  const math::RangeType<ElemType>& operator[](const size_t i) const
99  { return bounds[i]; }
100 
102  ElemType MinWidth() const { return minWidth; }
104  ElemType& MinWidth() { return minWidth; }
105 
107  const MetricType& Metric() const { return metric; }
109  MetricType& Metric() { return metric; }
110 
116  void Center(arma::Col<ElemType>& center) const;
117 
123  ElemType Volume() const;
124 
130  template<typename VecType>
131  ElemType MinDistance(const VecType& point,
133  const;
134 
140  ElemType MinDistance(const HRectBound& other) const;
141 
147  template<typename VecType>
148  ElemType MaxDistance(const VecType& point,
150  const;
151 
157  ElemType MaxDistance(const HRectBound& other) const;
158 
165  math::RangeType<ElemType> RangeDistance(const HRectBound& other) const;
166 
173  template<typename VecType>
174  math::RangeType<ElemType> RangeDistance(
175  const VecType& point,
176  typename std::enable_if_t<IsVector<VecType>::value>* = 0) const;
177 
185  template<typename MatType>
186  HRectBound& operator|=(const MatType& data);
187 
191  HRectBound& operator|=(const HRectBound& other);
192 
198  template<typename VecType>
199  bool Contains(const VecType& point) const;
200 
206  bool Contains(const HRectBound& bound) const;
207 
211  HRectBound operator&(const HRectBound& bound) const;
212 
216  HRectBound& operator&=(const HRectBound& bound);
217 
221  ElemType Overlap(const HRectBound& bound) const;
222 
226  ElemType Diameter() const;
227 
231  template<typename Archive>
232  void serialize(Archive& ar, const unsigned int version);
233 
234  private:
236  size_t dim;
240  ElemType minWidth;
242  MetricType metric;
243 };
244 
245 // A specialization of BoundTraits for this class.
246 template<typename MetricType, typename ElemType>
247 struct BoundTraits<HRectBound<MetricType, ElemType>>
248 {
250  const static bool HasTightBounds = true;
251 };
252 
253 } // namespace bound
254 } // namespace mlpack
255 
256 #include "hrectbound_impl.hpp"
257 
258 #endif // MLPACK_CORE_TREE_HRECTBOUND_HPP
typename enable_if< B, T >::type enable_if_t
Definition: prereqs.hpp:58
.hpp
Definition: add_to_po.hpp:21
A class to obtain compile-time traits about BoundType classes.
The core includes that mlpack expects; standard C++ includes and Armadillo.
Utility struct where Value is true if and only if the argument is of type LMetric.
Definition: hrectbound.hpp:30
ElemType MinWidth() const
Get the minimum width of the bound.
Definition: hrectbound.hpp:102
const math::RangeType< ElemType > & operator[](const size_t i) const
Modify the range for a particular dimension. No bounds checking.
Definition: hrectbound.hpp:98
math::RangeType< ElemType > & operator[](const size_t i)
Get the range for a particular dimension.
Definition: hrectbound.hpp:96
Hyper-rectangle bound for an L-metric.
Definition: hrectbound.hpp:54
MetricType & Metric()
Modify the instantiated metric associated with the bound.
Definition: hrectbound.hpp:109
size_t Dim() const
Gets the dimensionality.
Definition: hrectbound.hpp:92
bool Contains(const AddressType1 &address, const AddressType2 &loBound, const AddressType3 &hiBound)
Returns true if an address is contained between two other addresses.
Definition: address.hpp:256
const MetricType & Metric() const
Get the instantiated metric associated with the bound.
Definition: hrectbound.hpp:107
Definition of the Range class, which represents a simple range with a lower and upper bound...
void Center(const arma::mat &x, arma::mat &xCentered)
Creates a centered matrix, where centering is done by subtracting the sum over the columns (a column ...
ElemType & MinWidth()
Modify the minimum width of the bound.
Definition: hrectbound.hpp:104
If value == true, then VecType is some sort of Armadillo vector or subview.
Definition: arma_traits.hpp:35