使用NumPy计算欧几里德距离

使用NumPy计算欧几里德距离

任意坐标轴上两点之间的欧几里德距离是它们之间的最短距离。换句话说,它是两点之间的位移长度。给定二维平面上的两点A(a,b)和B(c,d),A和B之间的欧几里德距离如下所示:

2 2

  • 要找到三维平面上两点之间的距离:

设A(x 1 ,y 1 ,z 1 )和B(x 2 ,y 2 ,z 2 )为两点:

1 2 2 1 2 2 1 2 2

我们可以使用Python中的NumPy库 来找到两个向量之间的欧几里德距离,而不需要提及整个公式。

本文讨论了如何使用Python中NumPy库的功能来计算欧几里德距离。

不使用NumPy的一般方法

import math
point1 = [1, 3, 5]
point2 = [2, 5, 3]
sqrs = (point1 [0] - point2 [0])**2 + (point1[1] - point2[1])**2 + (point1[2] - point2[2])**2
euc_dist = math. sqrt (sqrs)
print ("Euclidian distance between point1 and point2: ", euc_dist)

输出:

Euclidian distance between point1 and point2:  3.0
  • 我们取了两个列表,存储了2个点的x、y和z坐标。通过传统的访问列表元素的方式,使用上述公式计算了两个点之间的欧几里得距离。

使用NumPy

  • 向量是1*1的矩阵。所有的向量都是数组。因此,我们使用数组来表示向量。

1. 使用linealg.norm()方法

向量的范数是向量的大小,用||vector||表示。

  • 共有8种范数L1,L2,Lp…L∞
  • L2范数也被称为”欧几里得范数”,是两个向量之间的最短距离。

公式:

2ni=1i2

  • 我们在库中使用norm()方法来根据参数和提供的值找到其中一种8种可用的范数。

语法:

代码:

import numpy as n
p1 = n. array ((4, 7, 9))
p2 = n. array ((10, 12, 14))
euc_dist = n. linalg. norm (p1 - p2)
print ("Euclidian distance between p1 and p2: ", euc_dist)

输出:

Euclidian distance between p1 and p2:  9.273618495495704
  • 在之前的程序中,我们使用numpy数组来存储点的坐标,而不是使用列表。numpy数组和列表的唯一区别是,numpy数组只能存储一个数据类型的数据,而列表可以存储不同的数据类型。
  • 不需要使用公式,我们使用lineal.norm()函数来计算欧几里得距离。

2. 使用dot()方法

  • dot()方法用于计算点积。 我们使用这个函数来计算坐标差的平方和。

代码:

import numpy as n
p1 = n. array ((4, 7, 9))
p2 = n. array ((10, 12, 14))
difference = p1 - p2
sum_sq = n. dot (difference. T, difference)
euc_dist = n. sqrt (sum_sq)
print ("Euclidian distance between p1 and p2: ", euc_dist)

输出:

Euclidian distance between p1 and p2:  9.273618495495704

理解:

这里,

p1 = 4i + 7j + 9k

p2 = 10i + 12j + 14k

= p1 – p2 = (4 – 10)i + (7 – 12)j + (9 – 14)k = -6i + -5j + -5k

差的转置(由于是1 * 1的矩阵,不发生变化) =

[-6, -5, -5]

点积([-6, -5, -5]和[-6, -5, -5]的运算) = (-6-6) + (-5-5) + (-5*-5) = 86

开方(sum_sq) = √86 = 9.27

3. square()和sum()方法

这两个方法的功能与它们的名称一样简单。其中一个用于计算矢量的和,另一个用于计算矢量的平方。

代码:

import numpy as n
p1 = n. array ((4, 7, 9))
p2 = n. array ((10, 12, 14))
difference = p1 - p2
sq_of_diff = n. square (difference)
sum_of_sq = n. sum (sq_of_diff)
euc_dist = n. sqrt (sum_of_sq)
print ("Euclidian distance between p1 and p2: ", euc_dist)

输出:

Euclidian distance between p1 and p2:  9.273618495495704

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程