Pythonでハミング距離、ユークリッド距離、マンハッタン距離を計算する方法

スポンサーリンク

今日は、Python プログラミング言語で距離を計算する方法を学びます。

この記事では、以下の距離の計算を行います。

    1. ハミング距離
  1. ユークリッド距離
  2. マンハッタン距離

それぞれの距離計算の公式を見た上で、Pythonのコードを用いて同じ計算をする方法を学びます。

こちらもお読みください。

Pythonでa^nを計算します。


スポンサーリンク

Python でハミング距離を計算する

ハミング距離は、2つの数値の間の距離ですが、2進数形式で計算されます。

これは基本的に、2進数のフォーマットで2つの数値の間にある異なるビットの数を意味します。

例えば、2進数の101と111を選択した場合、2進数の桁が1つしか違わないので、両者のハミング距離は1です。

Pythonによるハミング距離の実装

ここで、異なるビットの数を数えるために、XOR演算を使用します。

XORはビットが異なる場合のみ1となり、そうでない場合は0となります。

最後に、2つの数値のXORで設定されたビットの数を計算します。

1
2
3
4
5
6
7
8
9
10
11
12
13
a = int(input())
b = int(input())
 
x = a^b
final_ans = 0;
 
while (x > 0):
    final_ans += x & 1;
    x >>= 1;
 
print("First Number: ",a)
print("Second Number: ",b)
print("Hamming Distance: ",final_ans)

2つの入力として12と9を入力し、ハミング距離は以下の出力に示すように3となった。

First Number:  9
Second Number:  14
Hamming Distance:  3

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

ユークリッド距離とは、空間上の2点間の距離で、ピタゴラスの公式を利用して測定することができる。

 その公式を以下に示す。

点を (x,y,z) と (a,b,c) とすると、その距離は次のように計算されます。


(x-a)^2 + (y-b)^2 + (z-c)^2 ]の平方根。

実装

2つの座標点間のユークリッド距離を計算するために、python の numpy モジュールを使用します。

1
2
3
4
5
import numpy as np
p1 = np.array((1,2,3))
p2 = np.array((3,2,1))
sq = np.sum(np.square(p1 - p2))
print(np.sqrt(sq))

上記のコードの出力は、2.8284271247461903となります。

また、手動で電卓を使って計算しても、ほぼ同じ結果になります。

こちらもご覧ください。


Python でマンハッタン距離を計算する

2つのベクトル/配列(AとB)の間のマンハッタン距離は、Σ|Ai – Bi|として計算されます(Aiは最初の配列のi番目の要素、Biは2番目の配列のi番目の要素)。

コードの実装

1
2
3
4
5
6
7
8
9
10
11
A = [1,2,3]
B = [5,3,2]
 
dis = 0
 
for i in range(len(A)):
    dis += abs(A[i] - B[i])
 
print("First Array is: ", A)
print("Second Array is: ", B)
print("Manhattan Distance is: ", dis)

上記のコードの出力は以下のように表示されます。

First Array is:  [1, 2, 3]
Second Array is:  [5, 3, 2]
Manhattan Distance is6

まとめ

チュートリアルで紹介した距離計算の概念とコードロジックを理解していただけたでしょうか?チュートリアルを読んでいただき、ありがとうございました。

ハッピーラーニング!


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