scipy.spatial.distance.pdist(X, metric=’euclidean’) について
X:m×n行列(m個のn次元ベクトル(n次元空間内の点の座標)を要素に持っていると見る)
pdist(X, metric=’euclidean’):m個のベクトル\((v_1, v_2,\ldots , v_m)\)の表す点どうしの距離\(\mathrm{d}(v_i,v_{j})\; (i<j) \)を成分に持つ次のようなベクトルを出力。
$$\left( \mathrm{d}(v_1,v_2), \mathrm{d}(v_1,v_{3}),\ldots, \mathrm{d}(v_1,v_{m}),\mathrm{d}(v_2,v_{3}),\ldots, \mathrm{d}(v_2,v_{m}),\ldots, \mathrm{d}(v_{m-1},v_{m})\right)$$
squareform:pdistで出力した距離のベクトルを行列形式に変換できる。
#入力
import scipy.spatial.distance as distance
X=np.array([[1,0],[0,1],[2,0],[3,3]])
dist1=distance.pdist(X)
print(dist1)
#出力
[1.41421356 1. 3.60555128 2.23606798 3.60555128 3.16227766]
#入力
distance.squareform(dist1)
#出力
array([[0. , 1.41421356, 1. , 3.60555128],
[1.41421356, 0. , 2.23606798, 3.60555128],
[1. , 2.23606798, 0. , 3.16227766],
[3.60555128, 3.60555128, 3.16227766, 0. ]])
#対角成分は同じ点どうしでの距離なので0となる。
scipy.spatial.distance.cdist(X, Y, metric=’euclidean’) について
X:m×n行列(m個のn次元ベクトルを要素に持っていると見る)
Y:l×n行列(l個のn次元ベクトルを要素に持っていると見る)
cdist(X, Y, metric=’euclidean’):m個のベクトルとn個のベクトルの表す点の距離行列を出力。距離はn次元空間内のユークリッド距離。
距離行列とは \(X=(v_1,v_2,\ldots, v_m), Y=(w_1,w_2,\ldots, w_l)\) のとき、2点間の距離\(d(v_i,w_j)\)を成分に持つ行列。
$$\left( \begin{array}{cccc}
\mathrm{d}(v_1,w_1) & \mathrm{d}(v_1,w_2)& \cdots & \mathrm{d}(v_1,w_l) \\
\mathrm{d}(v_2,w_1)& \mathrm{d}(v_2,w_2)& \cdots& \mathrm{d}(v_2,w_l)\\
\vdots & \vdots& \ddots & \vdots \\
\mathrm{d}(v_m,w_1)& \mathrm{d}(v_m,w_2) &\cdots & \mathrm{d}(v_m,w_l)
\end{array}\right)$$
#入力
X=np.array([[1,0],[0,1],[2,0],[3,3]])
Y=np.array([[2,0],[1,1],[3,0]])
dist2=distance.cdist(X,Y)
print(dist2)
#出力
[[1. 1. 2. ]
[2.23606798 1. 3.16227766]
[0. 1.41421356 1. ]
[3.16227766 2.82842712 3. ]]
参考サイトはscipy documentationのページ
https://docs.scipy.org/doc/scipy/reference/spatial.distance.html
コメント