今日は、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
|
まとめ
チュートリアルで紹介した距離計算の概念とコードロジックを理解していただけたでしょうか?チュートリアルを読んでいただき、ありがとうございました。
ハッピーラーニング!