6 namespace mltk::metrics::dist{
 
   10         template<
typename T = 
double>
 
   13             std::string m_family, m_name;
 
   17             std::string& family() { 
return m_family; }
 
   18             std::string& name() { 
return m_name; }
 
   28         template<
typename T = 
double>
 
   32                 this->m_family = 
"Lp Minkowski distances";
 
   33                 this->m_name = 
"Euclidean";
 
   38                 for(
int i = 0; i < p.
size(); i++)
 
   40                 return std::sqrt(sum);
 
   44         template<
typename T = 
double>
 
   48                 this->m_family = 
"Lp Minkowski distances";
 
   49                 this->m_name = 
"Manhattan";
 
   52                 return mltk::abs(p1 - p2).sum();
 
   56         template<
typename T = 
double>
 
   60                 this->m_family = 
"Lp Minkowski distances";
 
   61                 this->m_name = 
"Chebyshev";
 
   70         template<
typename T = 
double>
 
   74                 this->m_family = 
"L1 Distance measures";
 
   75                 this->m_name = 
"Lorentzian";
 
   78                 return mltk::log(1 - mltk::abs(p1 - p2)).sum();
 
   82         template<
typename T = 
double>
 
   86                 return (mltk::abs(p1 - p2) / (mltk::abs(p1) + mltk::abs(p2))).sum();
 
   90         template<
typename T = 
double>
 
   94                 return mltk::abs(p1 - p2).sum() / (p1 + p2).sum();
 
   98         template<
typename T = 
double>
 
  102                 return mltk::abs(p1 - p2).sum() / p1.
size();
 
  106         template<
typename T = 
double>
 
  110                 return (1 / 2) * mltk::abs(p1 - p2).sum();
 
  116         template<
typename T = 
double>
 
  120                 this->m_family = 
"Inner product metrics measures";
 
  121                 this->m_name = 
"Jaccard";
 
  124                 return mltk::pow(p1 - p2, 2).sum() /
 
  125                        (mltk::pow(p1, 2).sum() + mltk::pow(p2, 2).sum() - (p1 * p2).sum());
 
  129         template<
typename T = 
double>
 
  133                 this->m_family = 
"Inner product metrics measures";
 
  134                 this->m_name = 
"Cosine";
 
  137                 return 1 - (p1 * p2).sum() / (std::sqrt(mltk::pow(p1, 2).sum()) * std::sqrt(mltk::pow(p2, 2).sum()));
 
  141         template<
typename T = 
double>
 
  145                 this->m_family = 
"Inner product metrics measures";
 
  146                 this->m_name = 
"Dice";
 
  149                 return 1 - 2 * (p1 * p2).sum() / (mltk::pow(p1, 2).sum() + mltk::pow(p2, 2).sum());
 
  153         template<
typename T = 
double>
 
  157                 this->m_family = 
"Inner product metrics measures";
 
  158                 this->m_name = 
"Chord";
 
  161                 return std::sqrt(2 - 2 * ((p1 * p2).sum() / (mltk::pow(p1, 2).sum() * mltk::pow(p2, 2).sum())));
 
  167         template<
typename T = 
double>
 
  171                 this->m_family = 
"Squared Chord distance measures";
 
  172                 this->m_name = 
"Bhattacharyya";
 
  175                 return -std::sqrt(mltk::pow(p1 * p2, 0.5).sum());
 
  179         template<
typename T = 
double>
 
  183                 this->m_family = 
"Squared Chord distance measures";
 
  184                 this->m_name = 
"SquaredChord";
 
  187                 return mltk::pow(mltk::pow(p1, 0.5) - mltk::pow(p2, 0.5), 2).sum();
 
  191         template<
typename T = 
double>
 
  195                 this->m_family = 
"Squared Chord distance measures";
 
  196                 this->m_name = 
"Matusita";
 
  199                 return std::sqrt(mltk::pow(mltk::pow(p1, 0.5) - mltk::pow(p2, 0.5), 2).sum());
 
  203         template<
typename T = 
double>
 
  207                 this->m_family = 
"Squared Chord distance measures";
 
  208                 this->m_name = 
"Hellinger";
 
  211                 return std::sqrt(2 * mltk::pow(mltk::pow(p1, 0.5) - mltk::pow(p2, 0.5), 2).sum());
 
  217         template<
typename T = 
double>
 
  221                 this->m_family = 
"Squared L2 distance measures";
 
  222                 this->m_name = 
"SquaredEuclidean";
 
  225                 return mltk::pow(p1 - p2, 2).sum();
 
  229         template<
typename T = 
double>
 
  233                 this->m_family = 
"Squared L2 distance measures";
 
  234                 this->m_name = 
"Clark";
 
  237                 return mltk::pow((p1 - p2)/(mltk::abs(p1) + mltk::abs(p2)), 2).sum();
 
  241         template<
typename T = 
double>
 
  245                 this->m_family = 
"Squared L2 distance measures";
 
  246                 this->m_name = 
"Neyman";
 
  249                 return (mltk::pow(p1 - p2, 2)/p1).sum();
 
  253         template<
typename T = 
double>
 
  257                 this->m_family = 
"Squared L2 distance measures";
 
  258                 this->m_name = 
"Pearson";
 
  261                 return (mltk::pow(p1 - p2, 2)/p2).sum();
 
  265         template<
typename T = 
double>
 
  269                 this->m_family = 
"Squared L2 distance measures";
 
  270                 this->m_name = 
"Pearson";
 
  273                 return (mltk::pow(p1 - p2, 2)/(p1 + p2)).sum();
 
  277         template<
typename T = 
double>
 
  281                 this->m_family = 
"Squared L2 distance measures";
 
  282                 this->m_name = 
"ProbabilisticSymmetric";
 
  285                 return 2 * (mltk::pow(p1 - p2, 2)/(p1 + p2)).sum();
 
  289         template<
typename T = 
double>
 
  293                 this->m_family = 
"Squared L2 distance measures";
 
  294                 this->m_name = 
"Divergence";
 
  297                 return 2 * (mltk::pow(p1 - p2, 2)/mltk::pow(p1 + p2, 2)).sum();
 
  301         template<
typename T = 
double>
 
  305                 this->m_family = 
"Squared L2 distance measures";
 
  306                 this->m_name = 
"AdditiveSymmetric";
 
  309                 return 2 * ((mltk::pow(p1 - p2, 2) * (p1 + p2))/(p1 * p2)).sum();
 
  313         template<
typename T = 
double>
 
  317                 this->m_family = 
"Squared L2 distance measures";
 
  318                 this->m_name = 
"Average";
 
  321                 return std::sqrt((1/p1.
size())*(mltk::pow(p1 - p2, 2)).sum());
 
  333         template<
typename T = 
double>
 
  337                 this->m_family = 
"Squared L2 distance measures";
 
  338                 this->m_name = 
"SquaredChiSquared";
 
  341                 return (mltk::pow(p1 - p2, 2)/mltk::abs(p1 + p2)).sum();
 
  347         template<
typename T = 
double>
 
  351                 this->m_family = 
"Shannon entropy distance measures";
 
  352                 this->m_name = 
"KullbackLeibler";
 
  355                 return (p1 * mltk::log(p1/p2)).sum();
 
  359         template<
typename T = 
double>
 
  363                 this->m_family = 
"Shannon entropy distance measures";
 
  364                 this->m_name = 
"Jeffreys";
 
  367                 return ((p1 - p2) * mltk::log(p1/p2)).sum();
 
  371         template<
typename T = 
double>
 
  375                 this->m_family = 
"Shannon entropy distance measures";
 
  376                 this->m_name = 
"KDivergence";
 
  379                 return (p1 * mltk::log((2 * p1)/(p1 + p2))).sum();
 
  383         template<
typename T = 
double>
 
  387                 this->m_family = 
"Shannon entropy distance measures";
 
  388                 this->m_name = 
"Topsoe";
 
  391                 return (p1 * mltk::log((2 * p1)/(p1 + p2))).sum() + (p2 * mltk::log((2 * p2)/(p1 + p2))).sum();
 
  395         template<
typename T = 
double>
 
  399                 this->m_family = 
"Shannon entropy distance measures";
 
  400                 this->m_name = 
"JensenShannon";
 
  403                 return (1/2) * (p1 * mltk::log((2 * p1)/(p1 + p2))).sum() + (p2 * mltk::log((2 * p2)/(p1 + p2))).sum();
 
  407         template<
typename T = 
double>
 
  411                 this->m_family = 
"Shannon entropy distance measures";
 
  412                 this->m_name = 
"JensenDifference";
 
  415                 return (1/2) * ((p1 * mltk::log(p1) + p2 * mltk::log(p2))/2 - ((p1 + p2)/2) * mltk::log((p1 + p2)/2)).sum();
 
  429         template<
typename T = 
double>
 
  433                 return std::max((mltk::pow(p1 - p2, 2)/p1).sum(), (mltk::pow(p1 - p2, 2)/p2).sum());
 
  437         template<
typename T = 
double>
 
  441                 return std::max((mltk::pow(p1 - p2, 2)/p1).sum(), (mltk::pow(p1 - p2, 2)/p2).sum());
 
  447         template<
typename T = 
double>
 
  451                 this->m_family = 
"Other distance measures";
 
  452                 this->m_name = 
"AverageL1Linf";
 
  455                 return (mltk::abs(p1-p2).sum() + 
mltk::max(mltk::abs(p1-p2)))/2;
 
  459         template<
typename T = 
double>
 
  463                 this->m_family = 
"Other distance measures";
 
  464                 this->m_name = 
"KumarJohnson";
 
  467                 return (mltk::pow(mltk::pow(p1, 2) + mltk::pow(p2, 2), 2)/(2 * mltk::pow(p1 * p2, 3/2))).sum();
 
  471         template<
typename T = 
double>
 
  475                 this->m_family = 
"Other distance measures";
 
  476                 this->m_name = 
"Taneja";
 
  479                 return (((p1 + p2)/2) * mltk::log((p1 + p2)/(2*mltk::pow(p1 * p2, 0.5)))).sum();
 
  483         template<
typename T = 
double>
 
  487                 this->m_family = 
"Other distance measures";
 
  488                 this->m_name = 
"Hassanat";
 
  492                 for(
size_t i = 0; i < p1.
size(); i++){
 
  495                         sum += 1 - (1+_min)/(1+
std::max(p1[i], p2[i]));
 
  498                         sum += 1 - (1+_min + std::abs(_min))/(1+_max + std::abs(_max));
 
std::size_t size() const
Returns the dimension of the point.
Definition: Point.hpp:133
Definition: DistanceMetric.hpp:302
Definition: DistanceMetric.hpp:448
Definition: DistanceMetric.hpp:314
Definition: DistanceMetric.hpp:99
Definition: DistanceMetric.hpp:168
Definition: DistanceMetric.hpp:83
Definition: DistanceMetric.hpp:57
Definition: DistanceMetric.hpp:154
Definition: DistanceMetric.hpp:230
Definition: DistanceMetric.hpp:130
Definition: DistanceMetric.hpp:142
Base functor class for the implementation of new metrics metrics.
Definition: DistanceMetric.hpp:11
Definition: DistanceMetric.hpp:290
Functor for the computation of the euclidean metrics between two points.
Definition: DistanceMetric.hpp:29
Definition: DistanceMetric.hpp:484
Definition: DistanceMetric.hpp:204
Definition: DistanceMetric.hpp:117
Definition: DistanceMetric.hpp:360
Definition: DistanceMetric.hpp:408
Definition: DistanceMetric.hpp:396
Definition: DistanceMetric.hpp:372
Definition: DistanceMetric.hpp:348
Definition: DistanceMetric.hpp:460
Definition: DistanceMetric.hpp:71
Definition: DistanceMetric.hpp:45
Definition: DistanceMetric.hpp:192
Definition: DistanceMetric.hpp:430
Definition: DistanceMetric.hpp:438
Definition: DistanceMetric.hpp:242
Definition: DistanceMetric.hpp:107
Definition: DistanceMetric.hpp:254
Definition: DistanceMetric.hpp:278
Definition: DistanceMetric.hpp:91
Definition: DistanceMetric.hpp:334
Definition: DistanceMetric.hpp:180
Definition: DistanceMetric.hpp:218
Definition: DistanceMetric.hpp:266
Definition: DistanceMetric.hpp:472
Definition: DistanceMetric.hpp:384
T min(const Point< T, R > &p)
Returns the min value of the point.
Definition: Point.hpp:557
T max(const Point< T, R > &p)
Returns the max value of the point.
Definition: Point.hpp:544