今日は、Python プログラミング言語で距離を計算する方法を学びます。
この記事では、以下の距離の計算を行います。
-
- ハミング距離
- ユークリッド距離
- マンハッタン距離
それぞれの距離計算の公式を見た上で、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 is : 6
|
まとめ
チュートリアルで紹介した距離計算の概念とコードロジックを理解していただけたでしょうか?チュートリアルを読んでいただき、ありがとうございました。
ハッピーラーニング!