私はPandasデータフレームを持っています(下記の小さな例を参照)。観測値(行)間のユークリッド距離を3列(フィーチャ)の値に基づいて計算したい。私はscipy.spatial.distance.pdistを使用しています。実行後の距離の抽出scipy.spatial.distance.pdist
返されたオブジェクト(dist)には、20個の観測値(行)の間に190個の距離が含まれていることを理解しています。 1行目と2行目の距離、1行目と3行目、1行目と20行目の間、2行目と3行目、2行目と2行目の間に距離がある「展開されていない」三角行列です第4など、
しかし、わかりません。そして、どうすれば20×20の対称行列を構築できますか?
私の究極の目的: 観測(行)ごとに、最も近い5つの近隣(つまり、そこから最小の距離の行)を見つけてそれらの5つの距離を合計したいと考えています。正方行列の場合は、各列に関数を適用するだけです。しかし、今私は 'dist'に対処する方法がわかりません。
ありがとうございました!
import numpy as np
import pandas as pd
# Generate fake Pandas data frame
a = pd.Series(np.random.normal(1, 0.1, 20))
df = pd.DataFrame(a, columns=['a'])
df['b'] = pd.Series(np.random.normal(2, 0.1, 20))
df['c'] = pd.Series(np.random.normal(3, 0.1, 20))
import scipy
dist = scipy.spatial.distance.pdist(df, metric='euclidean')
dist.shape
#(190)
ありがとうございました! – user3245256