13 #ifndef MLPACK_CORE_DATA_DATASET_INFO_IMPL_HPP 14 #define MLPACK_CORE_DATA_DATASET_INFO_IMPL_HPP 23 template<
typename PolicyType,
typename InputType>
25 const size_t dimensionality) :
26 types(dimensionality,
Datatype::numeric)
31 template<
typename PolicyType,
typename InputType>
33 const size_t dimensionality) :
34 types(dimensionality,
Datatype::numeric),
35 policy(
std::move(policy))
40 template<
typename PolicyType,
typename InputType>
42 const size_t dimensionality)
44 types = std::vector<Datatype>(dimensionality, Datatype::numeric);
49 template<
typename PolicyType,
typename InputType,
typename T>
50 void CallMapFirstPass(
52 const InputType& input,
53 const size_t dimension,
54 std::vector<Datatype>& types,
55 const typename std::enable_if<PolicyType::NeedsFirstPass>::type* = 0)
57 policy.template MapFirstPass<T>(input, dimension, types);
61 template<
typename PolicyType,
typename InputType,
typename T>
62 void CallMapFirstPass(
66 std::vector<Datatype>& ,
67 const typename std::enable_if<!PolicyType::NeedsFirstPass>::type* = 0)
72 template<
typename PolicyType,
typename InputType>
75 const size_t dimension)
78 CallMapFirstPass<PolicyType, InputType, T>(policy, input, dimension, types);
83 template<
typename PolicyType,
typename InputType>
86 const InputType& input,
87 const size_t dimension)
89 return policy.template MapString<MapType, T>(input, dimension, maps, types);
106 return std::isnan(t);
112 return std::isnan(t);
116 inline bool isnanSafe(
const long double& t)
118 return std::isnan(t);
123 template<
typename PolicyType,
typename InputType>
127 const size_t dimension,
128 const size_t unmappingIndex)
const 133 std::nexttoward(std::numeric_limits<T>::max(), T(0)) :
137 if (maps.at(dimension).second.count(usedValue) == 0)
139 std::ostringstream oss;
140 oss <<
"DatasetMapper<PolicyType, InputType>::UnmapString(): value '" 141 << value <<
"' unknown for dimension " << dimension;
142 throw std::invalid_argument(oss.str());
145 if (unmappingIndex >= maps.at(dimension).second.at(usedValue).size())
147 std::ostringstream oss;
148 oss <<
"DatasetMapper<PolicyType, InputType>::UnmapString(): value '" 149 << value <<
"' only has " 150 << maps.at(dimension).second.at(usedValue).size()
151 <<
" unmappings, but unmappingIndex is " << unmappingIndex <<
"!";
152 throw std::invalid_argument(oss.str());
155 return maps.at(dimension).second.at(usedValue)[unmappingIndex];
158 template<
typename PolicyType,
typename InputType>
162 const size_t dimension)
const 168 const T newValue = std::nexttoward(std::numeric_limits<T>::max(), T(0));
169 return maps.at(dimension).second.at(newValue).size();
172 return maps.at(dimension).second.at(value).size();
176 template<
typename PolicyType,
typename InputType>
177 inline typename PolicyType::MappedType
179 const InputType& input,
180 const size_t dimension)
183 if (maps[dimension].first.count(input) == 0)
185 std::ostringstream oss;
186 oss <<
"DatasetMapper<PolicyType, InputType>::UnmapValue(): input '" 187 << input <<
"' unknown for dimension " << dimension;
188 throw std::invalid_argument(oss.str());
191 return maps[dimension].first.at(input);
195 template<
typename PolicyType,
typename InputType>
197 const size_t dimension)
const 199 if (dimension >= types.size())
201 std::ostringstream oss;
202 oss <<
"requested type of dimension " << dimension <<
", but dataset only " 203 <<
"has " << types.size() <<
" dimensions";
204 throw std::invalid_argument(oss.str());
207 return types[dimension];
210 template<
typename PolicyType,
typename InputType>
212 const size_t dimension)
214 if (dimension >= types.size())
215 types.resize(dimension + 1, Datatype::numeric);
217 return types[dimension];
220 template<
typename PolicyType,
typename InputType>
224 return (maps.count(dimension) == 0) ? 0 : maps.at(dimension).first.size();
227 template<
typename PolicyType,
typename InputType>
233 template<
typename PolicyType,
typename InputType>
239 template<
typename PolicyType,
typename InputType>
245 template<
typename PolicyType,
typename InputType>
248 this->policy = std::forward<PolicyType>(policy);
Auxiliary information for a dataset, including mappings to/from strings (or other types) and the data...
Definition: dataset_mapper.hpp:41
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: cv.hpp:1
Datatype
The Datatype enum specifies the types of data mlpack algorithms can use.
Definition: datatype.hpp:24
Definition: pointer_wrapper.hpp:23
DatasetMapper(const size_t dimensionality=0)
Create the DatasetMapper object with the given dimensionality.
Definition: dataset_mapper_impl.hpp:24
bool isnanSafe(const T &)
A safe version of isnan() that only gets called when the type has a NaN at all.
Definition: dataset_mapper_impl.hpp:98