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 データ型に注意
numpy
やscipy
はリストや配列に対して使うことが前提です。
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初心者でも簡単に扱える便利な関数なので、ぜひ活用してみてください!