pdist
관측값 쌍 간의 쌍별(Pairwise) 거리
설명
예제
유클리드 거리를 계산하고 거리 벡터를 행렬로 변환하기
관측값 쌍 간의 유클리드 거리를 계산하고 squareform
을 사용하여 거리 벡터를 행렬로 변환합니다.
세 개의 관측값과 두 개의 변수를 갖는 행렬을 생성합니다.
rng('default') % For reproducibility X = rand(3,2);
유클리드 거리를 계산합니다.
D = pdist(X)
D = 1×3
0.2954 1.0670 0.9448
쌍별(Pairwise) 거리가 인덱스 (2,1), (3,1), (3,2)에 배열됩니다. squareform
을 사용하여 관측값 i
와 관측값 j
간의 거리를 쉽게 확인할 수 있습니다.
Z = squareform(D)
Z = 3×3
0 0.2954 1.0670
0.2954 0 0.9448
1.0670 0.9448 0
squareform
은 대칭 행렬을 반환합니다. 이 대칭 행렬에서 Z(i,j)
는 관측값 i
와 j
간의 쌍별 거리를 나타냅니다. 예를 들어, 관측값 2와 관측값 3 간의 거리를 구할 수 있습니다.
Z(2,3)
ans = 0.9448
Z
를 squareform
함수에 전달하여 pdist
함수의 출력값을 재현합니다.
y = squareform(Z)
y = 1×3
0.2954 1.0670 0.9448
squareform
의 출력값 y
와 pdist
의 출력값 D
는 같습니다.
민코프스키 거리 계산하기
세 개의 관측값과 두 개의 변수를 갖는 행렬을 생성합니다.
rng('default') % For reproducibility X = rand(3,2);
디폴트 지수 2를 사용하여 민코프스키 거리를 계산합니다.
D1 = pdist(X,'minkowski')
D1 = 1×3
0.2954 1.0670 0.9448
지수로 1을 사용하여 민코프스키 거리를 계산합니다. 이는 도시 블록 거리와 같습니다.
D2 = pdist(X,'minkowski',1)
D2 = 1×3
0.3721 1.5036 1.3136
D3 = pdist(X,'cityblock')
D3 = 1×3
0.3721 1.5036 1.3136
사용자 지정 거리 함수를 사용하여 누락 요소를 가진 쌍별(Pairwise) 거리 계산하기
NaN
값을 갖는 좌표를 무시하는 사용자 지정 거리 함수를 정의하고 이 사용자 지정 거리 함수를 사용하여 쌍별 거리를 계산합니다.
세 개의 관측값과 두 개의 변수를 갖는 행렬을 생성합니다.
rng('default') % For reproducibility X = rand(3,2);
첫 번째 관측값의 첫 번째 요소가 누락되었다고 가정합니다.
X(1,1) = NaN;
유클리드 거리를 계산합니다.
D1 = pdist(X)
D1 = 1×3
NaN NaN 0.9448
관측값 i
또는 관측값 j
가 NaN
값을 포함하는 경우 함수 pdist
는 i
와 j
간의 쌍별 거리로 NaN
을 반환합니다. 따라서, D1(1) 및 D1(2), 즉 쌍별 거리 (2,1) 및 (3,1)은 NaN
값입니다.
NaN
값을 갖는 좌표를 무시하는 사용자 지정 거리 함수 naneucdist
를 정의하고 유클리드 거리를 반환합니다.
function D2 = naneucdist(XI,XJ) %NANEUCDIST Euclidean distance ignoring coordinates with NaNs n = size(XI,2); sqdx = (XI-XJ).^2; nstar = sum(~isnan(sqdx),2); % Number of pairs that do not contain NaNs nstar(nstar == 0) = NaN; % To return NaN if all pairs include NaNs D2squared = sum(sqdx,2,'omitnan').*n./nstar; % Correction for missing coordinates D2 = sqrt(D2squared);
naneucdist
를 사용하고 pdist
의 입력 인수로 함수 핸들을 전달하여 거리를 계산합니다.
D2 = pdist(X,@naneucdist)
D2 = 1×3
0.3974 1.1538 0.9448
입력 인수
X
— 입력 데이터
숫자형 행렬
입력 데이터로, 크기가 m×n인 숫자형 행렬로 지정됩니다. 행은 개별 관측값에 대응되고, 열은 개별 변수에 대응됩니다.
데이터형: single
| double
Distance
— 거리 측정법
문자형 벡터 | string형 스칼라 | 함수 핸들
거리 측정법으로, 다음 표에 설명된 대로 문자형 벡터, string형 스칼라 또는 함수 핸들로 지정됩니다.
값 | 설명 |
---|---|
'euclidean' | 유클리드 거리입니다(디폴트 값). |
'squaredeuclidean' | 제곱 유클리드 거리입니다. (이 옵션은 효율성을 위해서만 제공됩니다. 삼각 부등식을 충족하지 않습니다.) |
'seuclidean' | 표준화된 유클리드 거리입니다. 관측값 간의 각 좌표 차이는 표준편차 |
'mahalanobis' |
|
'cityblock' | 도시 블록 거리입니다. |
'minkowski' | 민코프스키 거리입니다. 디폴트 지수는 2입니다. 다른 지수 |
'chebychev' | 체비쇼프 거리(최대 좌표 차이)입니다. |
'cosine' | 1에서 점 간의 끼인각에 대한 코사인을 뺀 값입니다(벡터로 처리됨). |
'correlation' | 1에서 점 간의 표본 상관을 뺀 값입니다(일련의 값으로 처리됨). |
'hamming' | 해밍 거리로, 서로 다른 좌표의 비율입니다. |
'jaccard' | 1에서 서로 다른, 0이 아닌 좌표의 백분율인 자카드 계수를 뺀 값입니다. |
'spearman' | 1에서 관측값 간 표본 스피어만의 순위 상관 계수를 뺀 값입니다(일련의 값으로 처리됨). |
@ | 사용자 지정 거리 함수 핸들입니다. 거리 함수의 형식은 다음과 같습니다. function D2 = distfun(ZI,ZJ) % calculation of distance ...
데이터가 희소가 아닌 경우 일반적으로 함수 핸들 대신 내장 거리 함수를 사용하면 더욱 신속하게 거리를 계산할 수 있습니다. |
정의는 거리 측정법 항목을 참조하십시오.
'seuclidean'
, 'minkowski'
또는 'mahalanobis'
를 사용하는 경우, 입력 인수 DistParameter
를 추가로 지정하여 이러한 측정법을 제어할 수 있습니다. DistParameter
의 디폴트 값을 사용한다면 다른 측정법과 같은 방식으로 이러한 측정법을 사용할 수도 있습니다.
예: 'minkowski'
DistParameter
— 거리 측정법 파라미터 값
양의 스칼라 | 숫자형 벡터 | 숫자형 행렬
거리 측정법 파라미터 값으로, 양의 스칼라, 숫자형 벡터 또는 숫자형 행렬로 지정됩니다. 이 인수는 Distance
를 'seuclidean'
, 'minkowski'
또는 'mahalanobis'
로 지정하는 경우에만 유효합니다.
Distance
가'seuclidean'
이면DistParameter
는 각 차원에 대한 스케일링 인자로 구성된 벡터이며 양의 벡터로 지정됩니다. 디폴트 값은std(X,'omitnan')
입니다.Distance
가'minkowski'
이면DistParameter
는 민코프스키 거리의 지수이며 양의 스칼라로 지정됩니다. 디폴트 값은 2입니다.Distance
가'mahalanobis'
이면DistParameter
는 공분산 행렬이며 숫자형 행렬로 지정됩니다. 디폴트 값은cov(X,'omitrows')
입니다.DistParameter
는 양의 정부호 대칭 행렬이어야 합니다.
예: 'minkowski',3
데이터형: single
| double
출력 인수
D
— 쌍별(Pairwise) 거리
숫자형 행 벡터
쌍별(Pairwise) 거리로, 관측값 쌍에 대응되는 길이가 m(m–1)/2인 숫자형 행 벡터로 반환됩니다. 여기서 m은 X
에 포함된 관측값의 개수입니다.
거리는 (2,1), (3,1), ..., (m,1), (3,2), ..., (m,2), ..., (m,m–1), 즉 m×m 거리 행렬의 왼쪽 아래 삼각 부분이 열 순서대로 배열됩니다. 관측값 i와 관측값 j 간의 쌍별 거리는 i≤j에 대해 D((i-1)*(m-i/2)+j-i)로 정의됩니다.
squareform
함수를 사용하여 D
를 대칭 행렬로 변환할 수 있습니다. Z = squareform(D)
는 m×m 행렬을 반환합니다. 여기서 Z(i,j)
는 관측값 i와 관측값 j 간의 쌍별 거리를 나타냅니다.
내장 거리 함수의 경우, 관측값 i나 관측값 j가 NaN
을 포함하면 D
의 대응값은 NaN
이 됩니다.
D
는 군집화 또는 다차원 스케일링에서 비유사성 행렬로 주로 사용됩니다. 자세한 내용은 계층적 군집화 항목과 cmdscale
, cophenet
, linkage
, mdscale
, optimalleaforder
의 함수 도움말 페이지를 참조하십시오. 이들 함수는 D
를 입력 인수로 받습니다.
세부 정보
거리 측정법
거리 측정법은 두 관측값 간의 거리를 정의하는 함수입니다. pdist
는 다음과 같은 다양한 거리 측정법을 지원합니다. 유클리드 거리, 표준화된 유클리드 거리, 마할라노비스 거리, 도시 블록 거리, 민코프스키 거리, 체비쇼프 거리, 코사인 거리, 상관관계 거리, 해밍 거리, 자카드 거리, 스피어만 거리.
m×n 데이터 행렬 X
가 주어진 경우, 이는 m(1×n)개 행 벡터 x1, x2, ..., xm으로 처리되며, 벡터 xs와 벡터 xt 간의 다양한 거리는 다음과 같이 정의됩니다.
유클리드 거리(Euclidean Distance)
유클리드 거리는 p = 2인 민코프스키 거리의 특수한 사례입니다.
표준화된 유클리드 거리
여기서 V는 j번째 대각선 요소가 (S(j))2인 n×n 대각 행렬입니다(여기서 S는 각 차원의 스케일링 인자로 구성된 벡터임).
마할라노비스 거리
여기서 C는 공분산 행렬입니다.
도시 블록 거리
도시 블록 거리는 p = 1인 민코프스키 거리의 특수한 사례입니다.
민코프스키 거리
p = 1인 특수한 사례에서 민코프스키 거리는 도시 블록 거리와 동일합니다. p = 2인 특수한 사례에서 민코프스키 거리는 유클리드 거리와 동일합니다. p = ∞인 특수한 사례에서 민코프스키 거리는 체비쇼프 거리와 동일합니다.
체비쇼프 거리
체비쇼프 거리는 p = ∞인 민코프스키 거리의 특수한 사례입니다.
코사인 거리
상관관계 거리
여기서
이고 입니다.
해밍 거리(Hamming Distance)
자카드 거리(Jaccard Distance)
스피어만 거리(Spearman Distance)
여기서
rsj는 x1j, x2j, ...xmj에 대해 얻은 xsj의 순위로,
tiedrank
에 의해 계산됩니다.rs 및 rt는 xs와 xt로 구성된 좌표별 순위 벡터입니다. 즉, rs = (rs1, rs2, ... rsn)입니다.
.
.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
거리 입력 인수 값(
Distance
)은 컴파일타임 상수여야 합니다. 예를 들어, 민코프스키 거리를 사용하려면codegen
의-args
값에coder.Constant('Minkowski')
를 포함시키십시오.거리 입력 인수 값(
Distance
)은 사용자 지정 거리 함수일 수 없습니다.pdist
의 생성된 코드는 생성된 코드에서 지원하는 공유 메모리 다중코어 플랫폼에서 병렬로 실행되도록parfor
(MATLAB Coder)를 사용하여 루프를 생성합니다. 사용 중인 컴파일러가 OpenMP(Open Multiprocessing) 응용 프로그램 인터페이스를 지원하지 않거나 사용자가 OpenMP 라이브러리를 비활성화한 경우 MATLAB® Coder™는parfor
루프를for
루프로 처리합니다. 지원되는 컴파일러를 확인하려면 지원되는 컴파일러를 참조하십시오. OpenMP 라이브러리를 비활성화하려면 구성 객체의EnableOpenMP
속성을false
로 설정하십시오. 자세한 내용은coder.CodeConfig
(MATLAB Coder)를 참조하십시오.
코드 생성에 대한 자세한 내용은 Introduction to Code Generation 항목 및 General Code Generation Workflow 항목을 참조하십시오.
GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
최적화된 CUDA 코드에 대해 지원되는 거리 입력 인수 값(
Distance
)은'euclidean'
,'squaredeuclidean'
,'seuclidean'
,'cityblock'
,'minkowski'
,'chebychev'
,'cosine'
,'correlation'
,'hamming'
,'jaccard'
입니다.Distance
는 사용자 지정 거리 함수일 수 없습니다.Distance
는 컴파일타임 상수여야 합니다.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
사용법 관련 참고 및 제한 사항:
거리 입력 인수 값(
Distance
)은 사용자 지정 거리 함수일 수 없습니다.
자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨
참고 항목
cluster
| clusterdata
| cmdscale
| cophenet
| dendrogram
| inconsistent
| linkage
| pdist2
| silhouette
| squareform
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)