Python|ユークリッド距離を求める:linalg.norm(), distance.euclidean()

1. はじめに

データ分析や機械学習の分野でよく登場するのがユークリッド距離です。
これは、2点間の直線距離を求める方法であり、類似度や距離計算の基礎となる考え方です。

Pythonでは、numpy.linalg.norm()scipy.spatial.distance.euclidean()を使うことで、ユークリッド距離を簡単に計算できます。

本記事では、「Python|ユークリッド距離を求める:linalg.norm(), distance.euclidean()」というタイトルの通り、
この2つの関数を使った実践的なコード例を交えて、分かりやすく解説していきます。
Python初心者〜中級者の方が、ユークリッド距離の基礎から応用まで理解できるよう構成しています。

 

2. Pythonでユークリッド距離を求める方法:linalg.norm(), distance.euclidean()

2.1 ユークリッド距離とは?

ユークリッド距離とは、2点間の「直線距離」を表す尺度です。
2次元空間では以下の数式で表されます:

√((x2 - x1)^2 + (y2 - y1)^2)

この計算は、Pythonの数値計算ライブラリを使えば簡単に実装できます。

2.2 numpy.linalg.norm() を使う

import numpy as np

# 2点の座標
point1 = np.array([1, 2])
point2 = np.array([4, 6])

# 差を取ってノルムを計算
distance = np.linalg.norm(point1 - point2)
print("ユークリッド距離:", distance)

実行結果:

ユークリッド距離: 5.0

2.3 scipy.spatial.distance.euclidean() を使う

もう一つの方法として、scipyライブラリのdistance.euclidean()関数もあります。
こちらは2点を引数として渡すだけで、ユークリッド距離を直接計算できます。

from scipy.spatial import distance

# 2点の座標
point1 = [1, 2]
point2 = [4, 6]

# ユークリッド距離を計算
distance_value = distance.euclidean(point1, point2)
print("ユークリッド距離:", distance_value)

実行結果:

ユークリッド距離: 5.0

 

3. よくある使い方・応用例

3.1 類似度の比較(k-NNなど)

機械学習アルゴリズムのk-NN(k近傍法)では、ユークリッド距離を使って「近いデータ」を判断します。
例えば、以下は3つの点の中からもっとも近い点を探す例です。

from scipy.spatial import distance

target = [2, 3]
candidates = [[1, 1], [4, 5], [3, 2]]

# 最も近い点を見つける
nearest = min(candidates, key=lambda point: distance.euclidean(target, point))
print("最も近い点:", nearest)

実行結果:

最も近い点: [3, 2]

3.2 距離行列の作成

複数の点間の距離をすべて計算して行列として表す場合にも、ユークリッド距離は使われます。

import numpy as np
from scipy.spatial import distance_matrix

points = np.array([[0, 0], [1, 1], [2, 2]])

# 距離行列を計算
dist_matrix = distance_matrix(points, points)
print("距離行列:\n", dist_matrix)

実行結果:

距離行列:
[[0.         1.41421356 2.82842712]
 [1.41421356 0.         1.41421356]
 [2.82842712 1.41421356 0.        ]]

 

4. 注意点・エラー対策

4.1 データ型に注意

numpyscipyはリストや配列に対して使うことが前提です。
Pythonの標準リスト同士をそのまま引き算するとエラーになります。

# これはエラーになる
point1 = [1, 2]
point2 = [3, 4]
# print(point1 - point2)  # TypeError

→ NumPyのarrayに変換してから計算しましょう。

4.2 次元数の一致

距離を求める2点の次元が一致していない場合にもエラーになります。

import numpy as np

point1 = np.array([1, 2])
point2 = np.array([3, 4, 5])
# np.linalg.norm(point1 - point2)  # ValueError

→ ベクトルの次元を事前に確認・チェックしておくと安心です。

 

5. まとめ

今回は、Pythonでユークリッド距離を求める2つの方法
numpy.linalg.norm()scipy.spatial.distance.euclidean()について詳しく解説しました。

  • データ間の距離を比較する場面(k-NN、クラスタリングなど)
  • 距離行列の生成
  • 類似度評価や空間データの分析

こういった実務的な分析やアルゴリズム設計にも応用可能です。
Python初心者でも簡単に扱える便利な関数なので、ぜひ活用してみてください!

タイトルとURLをコピーしました