Python でユークリッド距離を計算する

Manav Narula 2023年1月30日
  1. NumPy モジュールを使用して、2 点間のユークリッド距離を見つける
  2. 2 点間のユークリッド距離を求めるために distance.euclidean() 関数を使う
  3. math.dist() 関数を使用して、2 点間のユークリッド距離を見つける
Python でユークリッド距離を計算する

数学の世界では、任意の次元の 2 点間の最短距離はユークリッド距離と呼ばれます。これは、2 点間の差の 2 乗和の平方根です。

ユークリッド距離の式

Python では、numpy、scipy モジュールには、数学演算を実行し、2 点間のこの線分を計算する関数が非常によく装備されています。

このチュートリアルでは、座標間のユークリッド距離を計算するさまざまな方法について説明します。

NumPy モジュールを使用して、2 点間のユークリッド距離を見つける

座標が配列の形式である場合、numpy モジュールを使用して必要な距離を見つけることができます。配列のベクトルノルムを返すことができる norm() 関数があります。以下に示すように、2つの座標間のユークリッド距離を計算するのに役立ちます。

import numpy as np

a = np.array((1, 2, 3))
b = np.array((4, 5, 6))

dist = np.linalg.norm(a - b)

print(dist)

出力:

5.196152422706632

numpy モジュールを使用して数式を直接実装することもできます。このメソッドでは、要素の合計を返す numpy.sum() 関数を使用し、numpy.square() 関数は要素の 2 乗を返します。

import numpy as np

a = np.array((1, 2, 3))
b = np.array((4, 5, 6))

dist = np.sqrt(np.sum(np.square(a - b)))

print(dist)

出力:

5.196152422706632

numpy.sqrt() 関数は、値の平方根を提供します。

ユークリッド距離の式を実装する別の方法は、dot() 関数を使用することです。点の差とその転置の内積を見つけて、二乗和を返します。

例えば、

import numpy as np

a = np.array((1, 2, 3))
b = np.array((4, 5, 6))

temp = a - b
dist = np.sqrt(np.dot(temp.T, temp))

print(dist)

出力:

5.196152422706632

2 点間のユークリッド距離を求めるために distance.euclidean() 関数を使う

numpy モジュールを使用してユークリッド距離を計算するさまざまな方法について説明しました。ただし、これらの方法は少し遅くなる可能性があるため、より高速な代替方法を利用できます。

scipy ライブラリには、数学的および科学的な計算のための多くの機能があります。distance.euclidean() 関数は、2 点間のユークリッド距離を返します。

例えば、

from scipy.spatial import distance

a = (1, 2, 3)
b = (4, 5, 6)

print(distance.euclidean(a, b))

出力:

5.196152422706632

math.dist() 関数を使用して、2 点間のユークリッド距離を見つける

math モジュールも代替として使用できます。このモジュールの dist() 関数は、2 点間の線分を返すことができます。

例えば、

from math import dist

a = (1, 2, 3)
b = (4, 5, 6)

print(dist(a, b))

出力:

5.196152422706632

scipy および math モジュールメソッドは、numpy メソッドのより高速な代替手段であり、座標がタプルまたはリストの形式である場合に機能します。

著者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

関連記事 - NumPy Math