超初心者によるpythonメモ書き

python初心者である僕が有用だと感じたことを書き記します

pythonで距離行列を計算する

求めるものがすぐには出てこなかったのでメモしておく。


距離行列が欲しい際にはscipy.spatial.distanceを使う
例えば、

from scipy.spatial import distance

n = 10
data = [[random() for i in range(n)] for i in range(n)]

dist_vec=distance.pdist(data)

これは距離行列の上三角部分だけを返してくれる。
距離行列はそもそも対角成分が0の対称行列なので、
上三角部分だけベクトルで返してくれれば情報として十分である。

これを距離行列に変換したければ、

dist_mat=distance.squareform(dist_vec)

でできる。
なお、逆変換もこれでできるらしい。

距離行列を直接求めるのであれば、

distance.cdist(data, data)

でもいい。