본문 바로가기
파이썬

파이썬 How does condensed distance matrix work? (pdist)

by º기록 2021. 2. 2.
반응형


축약 된 거리 행렬 Y를 반환합니다. 각 및 (여기서)에 대해 메트릭 dist (u = X [i], v = X [j])가 계산되고 항목 ij에 저장됩니다.

in i * j 를 의미한다고 생각했습니다. 하지만 내가 틀렸을지도 모른다고 생각합니다. 치다

X = array([[1,2], [1,2], [3,4]])
dist_matrix = pdist(X)

문서에는 dist (X [0], X [2]) dist_matrix [0 * 2] 여야한다고 나와 있습니다. 그러나 dist_matrix [0 * 2] 는 2.8이 아닌 0입니다.

i j 가 주어 졌을 때 두 벡터의 유사성에 접근하기 위해 사용해야하는 공식은 무엇입니까?

 

해결 방법

 

다음과 같이 볼 수 있습니다. x 가 m x n이라고 가정합니다. 한 번에 두 개씩 선택할 수있는 m 행의 가능한 쌍은 itertools.combinations (range (m), 2) 입니다 (예 : m = 3 <). / 코드> :

>>> import itertools
>>> list(combinations(range(3),2))
[(0, 1), (0, 2), (1, 2)]

따라서 d = pdist (x) 인 경우 combinations (range (m), 2)) k 번째 튜플은 d [k] 와 관련된 x 행.

예:

>>> x = array([[0,10],[10,10],[20,20]])
>>> pdist(x)
array([ 10.        ,  22.36067977,  14.14213562])

첫 번째 요소는 dist (x [0], x [1]) , 두 번째 요소는 dist (x [0], x [2]) , 세 번째 요소는 dist (x [1], x [2]) .

또는 정사각형 거리 행렬의 위쪽 삼각형 부분에있는 요소로 1D 배열로 함께 연결되어 볼 수 있습니다.

예 :

>>> squareform(pdist(x)) 
array([[  0.   ,  10.   ,  22.361],
       [ 10.   ,   0.   ,  14.142],
       [ 22.361,  14.142,   0.   ]])

>>> y = array([[0,10],[10,10],[20,20],[10,0]])
>>> squareform(pdist(y)) 
array([[  0.   ,  10.   ,  22.361,  14.142],
       [ 10.   ,   0.   ,  14.142,  10.   ],
       [ 22.361,  14.142,   0.   ,  22.361],
       [ 14.142,  10.   ,  22.361,   0.   ]])
>>> pdist(y)
array([ 10.   ,  22.361,  14.142,  14.142,  10.   ,  22.361])

 

참조 페이지 https://stackoverflow.com/questions/13079563

 

 

반응형

댓글