pdist / cdist / squareform

이정훈·2026년 3월 14일

pdist

  • pair-wised distance → 모든 쌍 간의 거리
  • 데이터 수가 x라면 shape=(xC2xC2, 1)을 가지는 거리 쌍이 리턴
df = pd.DataFrame({
    'x': [0, 3, 6, 4, 1],
    'y': [0, 4, 0, 5, 1]
}, index=['A', 'B', 'C', 'D', 'E'])

display(pdist(df))

# array([5.        , 6.        , 6.40312424, 1.41421356, 5.        ,
#        1.41421356, 3.60555128, 5.38516481, 5.09901951, 5.        ])

pdist(df).shape

# (10,)

cdist

  • cross distance → 두 집합 간의 거리
  • 두 집합의 데이터 개수는 달라도 되지만, distance를 구하기 위한 feature의 개수는 같아야 함
  • A(M×pA(M \times p), B(N×pB(N \times p) → Result(M×N)Result(M \times N)
from sklearn.spatial.distance import pdist, cdist
matrix_AB = cdist(df_A, df_B, metric='euclidean')

df_dist_AB = pd.DataFrame(matrix_AB, index=df_A.index, columns=df_B.index)
print(df_dist_AB)

#          B1(3,4)   B2(6,0)
# A1(0,0)      5.0  6.000000
# A2(0,4)      3.0  7.211103
# A3(3,0)      4.0  3.000000

print(f"행렬 크기: {df_dist_AB.shape}")

# 행렬 크기: (3, 2)
profile
AngDDo

0개의 댓글