24 #ifndef SOM_DISTANCE_H 25 #define SOM_DISTANCE_H 34 template <
typename std::
size_t ND>
41 virtual double distance(
const std::array<double, ND>& left,
42 const std::array<double, ND>& right)
const = 0;
44 virtual double distance(
const std::array<double, ND>&,
45 const std::array<double, ND>&,
46 const std::array<double, ND>&)
const {
48 <<
"for this type of distance";
53 template <
typename std::
size_t ND>
58 virtual ~L2() =
default;
60 double distance(
const std::array<double, ND>& left,
const std::array<double, ND>& right)
const override {
62 for (std::size_t i = 0; i < ND; ++i) {
63 result += (left[i] - right[i]) * (left[i] - right[i]);
65 return std::sqrt(result);
68 double distance(
const std::array<double, ND>& left,
69 const std::array<double, ND>& right,
70 const std::array<double, ND>& uncertainties)
const override {
72 for (std::size_t i = 0; i < ND; ++i) {
73 double up = (left[i] - right[i]) * (left[i] - right[i]);
74 double down = uncertainties[i] * uncertainties[i];
77 return std::sqrt(result);
virtual ~Interface()=default
double distance(const std::array< double, ND > &left, const std::array< double, ND > &right) const override
virtual double distance(const std::array< double, ND > &, const std::array< double, ND > &, const std::array< double, ND > &) const
virtual double distance(const std::array< double, ND > &left, const std::array< double, ND > &right) const =0
double distance(const std::array< double, ND > &left, const std::array< double, ND > &right, const std::array< double, ND > &uncertainties) const override