首页 > 代码库 > distance
distance
1 /* 2 * Copyright 2016 E-Tool, Inc. 3 */ 4 5 #ifndef distance_h 6 #define distance_h 7 #include <math.h> 8 #include <vector> 9 using std::vector;10 11 #define max(a,b) (a>b?a:b)12 #define min(a,b) (a<b?a:b)13 14 class Distance {15 public:16 static double euclidean_distance(double x1,double y1,double x2,double y2) {17 return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));18 }19 static double euclidean_distance(double x1, double y1, double z1, double x2, double y2, double z2) {20 return sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2)+(z1-z2)*(z1-z2));21 }22 static double euclidean_distance(vector<double> x, vector<double> y) {23 double result = 0;24 for (int i = 0;i < x.size();i++) {25 result += (x[i]-y[i])*(x[i]-y[i]);26 }27 return sqrt(result);28 }29 static double manhattan_distance(double x1, double y1, double x2, double y2) {30 return abs(x1 - x2) + abs(y1 - y2);31 }32 static double manhattan_distance(vector<double> x, vector<double> y) {33 double result = 0;34 for (int i = 0;i < x.size();i++) {35 result += abs(x[i] - y[i]);36 }37 return result;38 }39 static double chebyshev_distance(double x1, double y1, double x2, double y2) {40 return max(abs(x1 - x2) ,abs(y1 - y2));41 }42 static double chebyshev_distance(vector<double> x, vector<double> y) {43 double result=-1;44 for (int i = 0;i < x.size();i++) {45 result = max(result, abs(x[i] - y[i]));46 }47 return result;48 }49 static double minkowski_distance(vector<double> x, vector<double> y,int p) {50 double result = 0;51 for (int i = 0;i < x.size();i++) {52 result += pow(abs(x[i]-y[i]),p);53 }54 return pow(result,1/p);55 }56 /*57 * Standardized Euclidean distance58 */59 static double standardized_euclidean_distance(vector<double> x, vector<double> y) {60 double result = 0;61 for (int i = 0;i < x.size();i++) {62 double r=(x[i]+y[i])/2;63 double s = (x[i]-r)*(x[i]-r)+(y[i]-r)*(y[i]-r);64 result += (x[i]-y[i])*(x[i]-y[i]) / s;65 }66 return sqrt(result);67 }68 static double information_entropy(vector<double> p) {69 double result=0;70 for (int i = 0;i < p.size();i++) {71 result -= p[i] * (log(p[i])/log(2));72 }73 return result;74 }75 };76 77 #endif
distance
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。