## 距离 > 选定的算法需要使用函数来计算距离。 ### 欧几里德 计算类欧氏距离。 ![](https://box.kancloud.cn/978ec343781dbfb1a1f175f3ed212235_535x119.png) 要计算欧几里德距离: ``` $a = [4, 6]; $b = [2, 5]; $euclidean = new Euclidean(); $euclidean->distance($a, $b); // return 2.2360679774998 ``` ***** ### 曼哈顿 用于计算曼哈顿距离的类: ![](https://box.kancloud.cn/75cce2c885e061aeedc44ff956b10def_297x55.png) 要计算曼哈顿距离: ``` $a = [4, 6]; $b = [2, 5]; $manhattan = new Manhattan(); $manhattan->distance($a, $b); // return 3 ``` ***** ### 切比雪夫 计算Chebyshev距离的类。 ![](https://box.kancloud.cn/d25d1670a23c89299756992a0196606f_280x27.png) 要计算Chebyshev距离: ``` $a = [4, 6]; $b = [2, 5]; $chebyshev = new Chebyshev(); $chebyshev->distance($a, $b); // return 2 ``` ***** ### 闵可夫斯基 用于计算Minkowski距离的类。 ![](https://box.kancloud.cn/6d82fdf8a3232dd522ec13f19748958e_147x57.png) 要计算Minkowski距离: ``` $a = [4, 6]; $b = [2, 5]; $minkowski = new Minkowski(); $minkowski->distance($a, $b); // return 2.080 ``` 您可以提供`lambda`参数: ``` $a = [6, 10, 3]; $b = [2, 5, 5]; $minkowski = new Minkowski($lambda = 5); $minkowski->distance($a, $b); // return 5.300 ``` ***** ### 自定义距离 要应用自己的距离使用距离界面功能。例 ``` class CustomDistance implements Distance { /** * @param array $a * @param array $b * * @return float */ public function distance(array $a, array $b) : float { $distance = []; $count = count($a); for ($i = 0; $i < $count; ++$i) { $distance[] = $a[$i] * $b[$i]; } return min($distance); } } ```