이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
pdist2
두 관측값 세트 간의 쌍별(Pairwise) 거리
구문
설명
는 D
= pdist2(X,Y
,Distance
,DistParameter
)Distance
및 DistParameter
로 지정된 측정법을 사용하여 거리를 반환합니다. Distance
가 'seuclidean'
, 'minkowski'
또는 'mahalanobis'
인 경우에만 DistParameter
를 지정할 수 있습니다.
는 위에 열거된 인수에 대해 이름-값 모수를 사용하여 계산을 수정합니다. 예를 들면 다음과 같습니다.D
= pdist2(___,Name,Value
)
D = pdist2(X,Y,Distance,'Smallest',K)
는Distance
로 지정된 측정법을 사용하여 거리를 계산하고Y
의 관측값에서X
의 관측값까지의 쌍별 거리가 최소인K
개를 오름차순으로 반환합니다.D = pdist2(X,Y,Distance,DistParameter,'Largest',K)
는Distance
및DistParameter
로 지정된 측정법을 사용하여 거리를 계산하고K
개의 최대 쌍별 거리를 내림차순으로 반환합니다.
예제
유클리드 거리 계산하기
세 개의 관측값과 두 개의 변수를 갖는 두 행렬을 생성합니다.
rng('default') % For reproducibility X = rand(3,2); Y = rand(3,2);
유클리드 거리를 계산합니다. 입력 인수 Distance
의 디폴트 값은 'euclidean'
입니다. 이름-값 쌍의 인수를 사용하지 않고 유클리드 거리를 계산할 때에는 Distance
를 지정하지 않아도 됩니다.
D = pdist2(X,Y)
D = 3×3
0.5387 0.8018 0.1538
0.7100 0.5951 0.3422
0.8805 0.4242 1.2050
D(i,j)
는 X
의 관측값 i
와 Y
의 관측값 j
간의 쌍별(Pairwise) 거리를 나타냅니다.
민코프스키 거리 계산하기
세 개의 관측값과 두 개의 변수를 갖는 두 행렬을 생성합니다.
rng('default') % For reproducibility X = rand(3,2); Y = rand(3,2);
디폴트 지수 2를 사용하여 민코프스키 거리를 계산합니다.
D1 = pdist2(X,Y,'minkowski')
D1 = 3×3
0.5387 0.8018 0.1538
0.7100 0.5951 0.3422
0.8805 0.4242 1.2050
지수로 1을 사용하여 민코프스키 거리를 계산합니다. 이는 도시 블록 거리와 같습니다.
D2 = pdist2(X,Y,'minkowski',1)
D2 = 3×3
0.5877 1.0236 0.2000
0.9598 0.8337 0.3899
1.0189 0.4800 1.7036
D3 = pdist2(X,Y,'cityblock')
D3 = 3×3
0.5877 1.0236 0.2000
0.9598 0.8337 0.3899
1.0189 0.4800 1.7036
두 개의 최소 쌍별(Pairwise) 거리 구하기
세 개의 관측값과 두 개의 변수를 갖는 두 행렬을 생성합니다.
rng('default') % For reproducibility X = rand(3,2); Y = rand(3,2);
Y
의 각 관측값에서 X
의 관측값까지의 쌍별 유클리드 거리가 최소인 두 개를 구합니다.
[D,I] = pdist2(X,Y,'euclidean','Smallest',2)
D = 2×3
0.5387 0.4242 0.1538
0.7100 0.5951 0.3422
I = 2×3
1 3 1
2 2 2
Y
의 각 관측값에 대해 pdist2
는 X
에 포함된 모든 관측값까지의 거리를 계산하고 비교하여 두 개의 최소 거리를 구합니다. 이 함수는 그런 다음 거리를 D
의 각 열에서 오름차순으로 정렬합니다. I
는 D
의 거리에 대응되는 X
내 관측값의 인덱스를 포함합니다.
fasteuclidean
거리를 사용하여 거리 계산 가속화하기
2개의 큰 점 행렬을 만든 다음 디폴트 "euclidean"
거리 측정법을 사용한 pdist2
에 쓰인 시간을 측정합니다.
rng default % For reproducibility N = 10000; X = randn(N,1000); Y = randn(N,1000); D = pdist2(X,Y); % Warm up function for more reliable timing information tic D = pdist2(X,Y); standard = toc
standard = 15.7047
다음으로, "fasteuclidean"
거리 측정법을 사용한 pdist2
에 쓰인 시간을 측정합니다. 캐시 크기를 100으로 지정합니다.
D = pdist2(X,Y,"fasteuclidean",CacheSize=100); % Warm up function tic D2 = pdist2(X,Y,"fasteuclidean",CacheSize=100); accelerated = toc
accelerated = 1.8779
가속화된 계산이 표준과 비교하여 몇 배 더 빠른지 평가합니다.
standard/accelerated
ans = 8.3629
이 예제의 경우 가속화된 버전은 2배 이상 빠릅니다.
사용자 지정 거리 함수를 사용하여 누락 요소를 가진 쌍별(Pairwise) 거리 계산하기
NaN
값을 갖는 좌표를 무시하는 사용자 지정 거리 함수를 정의하고 이 사용자 지정 거리 함수를 사용하여 쌍별 거리를 계산합니다.
세 개의 관측값과 세 개의 변수를 갖는 두 행렬을 생성합니다.
rng('default') % For reproducibility X = rand(3,3) Y = [X(:,1:2) rand(3,1)]
X = 0.8147 0.9134 0.2785 0.9058 0.6324 0.5469 0.1270 0.0975 0.9575 Y = 0.8147 0.9134 0.9649 0.9058 0.6324 0.1576 0.1270 0.0975 0.9706
X와 Y의 처음 두 열은 서로 동일합니다. X(1,1)
이 누락되었다고 가정합니다.
X(1,1) = NaN
X = NaN 0.9134 0.2785 0.9058 0.6324 0.5469 0.1270 0.0975 0.9575
해밍 거리를 계산합니다.
D1 = pdist2(X,Y,'hamming')
D1 = NaN NaN NaN 1.0000 0.3333 1.0000 1.0000 1.0000 0.3333
X
의 관측값 i
또는 Y
의 관측값 j
가 NaN
값을 포함하는 경우, 함수 pdist2
는 i
와 j
간의 쌍별(Pairwise) 거리로 NaN
을 반환합니다. 따라서, D1(1,1), D1(1,2), D1(1,3)은 NaN
값입니다.
NaN
값이 갖는 좌표를 무시하는 사용자 지정 거리 함수 nanhamdist
를 정의하고 해밍 거리를 계산합니다. 대량의 관측값을 사용하는 경우에는 데이터 좌표를 순환하여 더욱 빠르게 거리를 계산할 수 있습니다.
function D2 = nanhamdist(XI,XJ) %NANHAMDIST Hamming distance ignoring coordinates with NaNs [m,p] = size(XJ); nesum = zeros(m,1); pstar = zeros(m,1); for q = 1:p notnan = ~(isnan(XI(q)) | isnan(XJ(:,q))); nesum = nesum + ((XI(q) ~= XJ(:,q)) & notnan); pstar = pstar + notnan; end D2 = nesum./pstar;
nanhamdist
를 사용하고 pdist2
의 입력 인수로 함수 핸들을 전달하여 거리를 계산합니다.
D2 = pdist2(X,Y,@nanhamdist)
D2 = 0.5000 1.0000 1.0000 1.0000 0.3333 1.0000 1.0000 1.0000 0.3333
기존 군집에 새 데이터를 할당하고 C/C++ 코드 생성하기
kmeans
는 k-평균 군집화를 수행하여 데이터를 k개의 군집으로 분할합니다. 군집화를 수행할 새 데이터 세트가 있는 경우 kmeans
를 사용하여 기존 데이터와 새 데이터를 포함하는 새 군집을 생성할 수 있습니다. kmeans
함수는 C/C++ 코드 생성을 지원하므로 훈련 데이터를 받아서 군집화 결과를 반환하는 코드를 생성한 다음 코드를 장치에 배포할 수 있습니다. 이 워크플로에서는 훈련 데이터를 전달해야 하는데, 그 크기가 상당히 클 수 있습니다. 장치의 메모리를 절약하기 위해 각각 kmeans
와 pdist2
를 사용하여 훈련과 예측을 분리할 수 있습니다.
kmeans
를 사용하여 MATLAB®에서 군집을 생성하고 생성된 코드에서 pdist2
를 사용하여 기존 군집에 새 데이터를 할당합니다. 코드 생성을 위해, 군집 중심 위치와 새 데이터 세트를 받아서 가장 가까운 군집의 인덱스를 반환하는 진입점 함수를 정의합니다. 그런 다음 진입점 함수에 대한 코드를 생성합니다.
C/C++ 코드를 생성하려면 MATLAB® Coder™가 필요합니다.
k-평균 군집화 수행하기
세 개의 분포를 사용하여 훈련 데이터 세트를 생성합니다.
rng('default') % For reproducibility X = [randn(100,2)*0.75+ones(100,2); randn(100,2)*0.5-ones(100,2); randn(100,2)*0.75];
kmeans
를 사용하여 훈련 데이터를 세 개 군집으로 분할합니다.
[idx,C] = kmeans(X,3);
군집과 군집 중심을 플로팅합니다.
figure gscatter(X(:,1),X(:,2),idx,'bgm') hold on plot(C(:,1),C(:,2),'kx') legend('Cluster 1','Cluster 2','Cluster 3','Cluster Centroid')
기존 군집에 새 데이터 할당하기
테스트 데이터 세트를 생성합니다.
Xtest = [randn(10,2)*0.75+ones(10,2); randn(10,2)*0.5-ones(10,2); randn(10,2)*0.75];
기존 군집을 사용하여 테스트 데이터 세트를 분류합니다. pdist2
를 사용하여 각 테스트 데이터 점에서 가장 가까운 중심을 구합니다.
[~,idx_test] = pdist2(C,Xtest,'euclidean','Smallest',1);
gscatter
를 사용하여 테스트 데이터를 플로팅하고 idx_test
를 사용하여 테스트 데이터에 레이블을 지정합니다.
gscatter(Xtest(:,1),Xtest(:,2),idx_test,'bgm','ooo') legend('Cluster 1','Cluster 2','Cluster 3','Cluster Centroid', ... 'Data classified to Cluster 1','Data classified to Cluster 2', ... 'Data classified to Cluster 3')
코드 생성하기
기존 군집에 새 데이터를 할당하는 C 코드를 생성합니다. C/C++ 코드를 생성하려면 MATLAB® Coder™가 필요합니다.
중심 위치와 새 데이터를 받는 findNearestCentroid
라는 이름의 진입점 함수를 정의한 다음 pdist2
를 사용하여 가장 가까운 군집을 찾습니다.
진입점 함수의 함수 시그니처 뒤에 %#codegen
컴파일러 지시문(또는 pragma)을 추가하여 MATLAB 알고리즘을 위한 코드를 생성하고자 함을 표시합니다. 이 지시문을 추가하면 MATLAB 코드 분석기에 코드 생성 중에 오류를 유발할 수 있는 위반을 진단하여 수정할 수 있도록 지원해 달라는 명령을 내리게 됩니다.
type findNearestCentroid % Display contents of findNearestCentroid.m
function idx = findNearestCentroid(C,X) %#codegen [~,idx] = pdist2(C,X,'euclidean','Smallest',1); % Find the nearest centroid
참고: 이 페이지의 오른쪽 위 섹션에 있는 버튼을 클릭하고 이 예제를 MATLAB®에서 열면 예제 폴더가 열립니다. 이 폴더에는 진입점 함수 파일이 포함되어 있습니다.
codegen
(MATLAB Coder)을 사용하여 코드를 생성합니다. C와 C++는 정적 유형 언어이므로 컴파일 시점에 진입점 함수의 모든 변수의 속성을 결정해야 합니다. findNearestCentroid
의 입력값 크기와 데이터형을 지정하려면 -args
옵션을 사용하여 특정 데이터형과 배열 크기를 포함하는 값 세트를 나타내는 MATLAB 표현식을 전달하십시오. 자세한 내용은 Specify Variable-Size Arguments for Code Generation 항목을 참조하십시오.
codegen findNearestCentroid -args {C,Xtest}
Code generation successful.
codegen
은 플랫폼별 확장자를 갖는 MEX 함수 findNearestCentroid_mex
를 생성합니다.
생성된 코드를 확인합니다.
myIndx = findNearestCentroid(C,Xtest); myIndex_mex = findNearestCentroid_mex(C,Xtest); verifyMEX = isequal(idx_test,myIndx,myIndex_mex)
verifyMEX = logical
1
isequal
이 논리값 1(true
)을 반환합니다. 이는 모든 입력값이 동일하다는 의미입니다. 비교를 통해 pdist2
함수, findNearestCentroid
함수 및 MEX 함수가 동일한 인덱스를 반환함을 확인할 수 있습니다.
GPU Coder™를 사용하여 최적화된 CUDA® 코드를 생성할 수도 있습니다.
cfg = coder.gpuConfig('mex'); codegen -config cfg findNearestCentroid -args {C,Xtest}
코드 생성에 대한 자세한 내용은 General Code Generation Workflow 항목을 참조하십시오. GPU Coder에 대한 자세한 내용은 GPU Coder 시작하기 (GPU Coder) 항목과 지원되는 함수 (GPU Coder) 항목을 참조하십시오.
입력 인수
X,Y
— 입력 데이터
숫자형 행렬
입력 데이터로, 숫자형 행렬로 지정됩니다. X
는 mx×n 행렬이고 Y
는 my×n 행렬입니다. 행은 개별 관측값에 대응되고, 열은 개별 변수에 대응됩니다.
데이터형: single
| double
Distance
— 거리 측정법
문자형 벡터 | string형 스칼라 | 함수 핸들
거리 측정법으로, 다음 표에 설명된 대로 문자형 벡터, string형 스칼라 또는 함수 핸들로 지정됩니다.
값 | 설명 |
---|---|
'euclidean' | 유클리드 거리(디폴트 값) |
'squaredeuclidean' | 제곱 유클리드 거리입니다. (이 옵션은 효율성을 위해서만 제공됩니다. 삼각 부등식을 충족하지 않습니다.) |
'seuclidean' | 표준화된 유클리드 거리입니다. 관측값 간의 각 좌표 차이는 표준편차 |
'fasteuclidean' | 예측 변수 개수가 10개 이상인 경우 시간을 아끼는 대체 알고리즘을 사용하여 계산된 유클리드 거리입니다. 속도가 더 빠른 이 알고리즘은 정확도가 떨어질 수 있습니다. 'fast' 로 시작하는 알고리즘은 희소 형식 데이터를 지원하지 않습니다. 자세한 내용은 알고리즘 항목을 참조하십시오. |
'fastsquaredeuclidean' | 예측 변수 개수가 10개 이상인 경우 시간을 아끼는 대체 알고리즘을 사용하여 계산된 제곱 유클리드 거리입니다. 속도가 더 빠른 이 알고리즘은 정확도가 떨어질 수 있습니다. 'fast' 로 시작하는 알고리즘은 희소 형식 데이터를 지원하지 않습니다. 자세한 내용은 알고리즘 항목을 참조하십시오. |
'fastseuclidean' | 예측 변수 개수가 10개 이상인 경우 시간을 아끼는 대체 알고리즘을 사용하여 계산된 표준화된 유클리드 거리입니다. 속도가 더 빠른 이 알고리즘은 정확도가 떨어질 수 있습니다. 'fast' 로 시작하는 알고리즘은 희소 형식 데이터를 지원하지 않습니다. 자세한 내용은 알고리즘 항목을 참조하십시오. |
'mahalanobis' | 마할라노비스 거리로, |
'cityblock' | 도시 블록 거리 |
'minkowski' | 민코프스키 거리입니다. 디폴트 지수는 2입니다. 다른 지수 |
'chebychev' | 체비쇼프 거리(최대 좌표 차이) |
'cosine' | 1에서 점 간의 끼인각에 대한 코사인을 뺀 값(벡터로 처리됨) |
'correlation' | 1에서 점 간의 표본 상관을 뺀 값(일련의 값으로 처리됨) |
'hamming' | 해밍 거리로, 서로 다른 좌표의 비율 |
'jaccard' | 0이 아닌 두 좌표의 값이 서로 다른 비율인 자카드 계수를 1에서 뺀 값 |
'spearman' | 1에서 관측값 간 표본 스피어만의 순위 상관 계수를 뺀 값(일련의 값으로 처리됨) |
@ | 사용자 지정 거리 함수 핸들입니다. 거리 함수의 형식은 다음과 같습니다. function D2 = distfun(ZI,ZJ) % calculation of distance ...
데이터가 희소 형식이 아닌 경우 일반적으로 함수 핸들 대신 내장 거리 측정법을 사용하면 더욱 신속하게 거리를 계산할 수 있습니다. |
정의는 거리 측정법 항목을 참조하십시오.
'seuclidean'
, 'minkowski'
또는 'mahalanobis'
를 사용하는 경우, 입력 인수 DistParameter
를 추가로 지정하여 이러한 측정법을 제어할 수 있습니다. DistParameter
의 디폴트 값을 사용하여 다른 측정법과 같은 방식으로 이러한 측정법을 사용할 수도 있습니다.
예: 'minkowski'
데이터형: char
| string
| function_handle
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
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: 'Smallest',K
또는 'Largest',K
입니다. 'Smallest'
와 'Largest'
를 동시에 사용할 수는 없습니다.
CacheSize
— 메가바이트 단위의 그람 행렬 크기
1e3
(디폴트 값) | 양의 스칼라 | 'maximal'
메가바이트 단위의 그람 행렬 크기로, 양의 스칼라 또는 'maximal'
로 지정됩니다. pdist2
함수는 Distance
인수가 fast
로 시작하는 경우에만 CacheSize
를 사용할 수 있습니다.
'maximal'
인 경우 pdist2
는 크기가 MX
×MY
인 전체 중간 행렬에 대해 충분한 메모리를 할당하려고 시도합니다. 여기서 MX
는 입력 데이터 X
의 행 개수이며, MY
는 입력 데이터 Y
의 행 개수입니다. 캐시 크기는 중간 행렬 전체를 다 담을 만큼 크지 않아도 되지만 적어도 MX
×1 벡터를 유지할 수 있을 만큼은 커야 합니다. 그렇지 않은 경우 pdist2
함수는 통상적인 알고리즘을 사용하여 유클리드 거리를 계산합니다.
거리 인수가 fast
로 시작하고 CacheSize
가 너무 크거나 'maximal'
인 경우, pdist2
는 사용 가능한 메모리를 초과하는 그람 행렬을 할당하려고 시도할 수 있습니다. 이 경우, MATLAB®에서 오류를 발생시킵니다.
예: CacheSize='maximal'
데이터형: double
| char
| string
Smallest
— 구할 최소 거리의 개수
양의 정수
구할 최소 거리의 개수로, 'Smallest'
와 함께 양의 정수가 쉼표로 구분되어 지정됩니다. 'Smallest'
를 지정하면 pdist2
가 거리를 D
의 각 열에서 오름차순으로 정렬합니다. 인수 Smallest
와 Largest
중 하나만 사용할 수 있습니다.
예: 'Smallest',3
데이터형: single
| double
Largest
— 구할 최대 거리의 개수
양의 정수
구할 최대 거리의 개수로, 'Largest'
와 함께 양의 정수가 쉼표로 구분되어 지정됩니다. 'Largest'
를 지정하면 pdist2
가 거리를 D
의 각 열에서 내림차순으로 정렬합니다. 인수 Smallest
와 Largest
중 하나만 사용할 수 있습니다.
예: 'Largest',3
데이터형: single
| double
출력 인수
D
— 쌍별(Pairwise) 거리
숫자형 행렬
쌍별 거리로, 숫자형 행렬로 반환됩니다.
'Smallest'
또는 'Largest'
를 지정하지 않을 경우 D
는 mx×my 행렬입니다. 여기서 mx 및 my는 각각 X
및 Y
에 포함된 관측값 개수입니다. D(i,j)
는 X
의 관측값 i
와 Y
의 관측값 j
간의 거리입니다. 내장 거리 함수의 경우, X
의 관측값 i 또는 Y
의 관측값 j가 NaN
을 포함하면 D(i,j)
는 NaN
이 됩니다.
'Smallest'
또는 'Largest'
를 K
로 지정하는 경우, D
는 K
×my 행렬입니다. D
는 Y
의 관측값에서 X
의 관측값까지의 쌍별 거리가 최소인 K
개 또는 최대인 K
개를 포함합니다. Y
의 각 관측값에 대해 pdist2
는 X
의 모든 관측값까지의 거리 값을 계산하고 비교하여 K
개의 최소 거리 또는 최대 거리를 구합니다. K
가 mx보다 클 경우, pdist2
는 mx×my 행렬을 반환합니다.
세부 정보
거리 측정법
거리 측정법은 두 관측값 간의 거리를 정의하는 함수입니다. pdist2
는 다음과 같은 다양한 거리 측정법을 지원합니다. 유클리드 거리, 표준화된 유클리드 거리, 마할라노비스 거리, 도시 블록 거리, 민코프스키 거리, 체비쇼프 거리, 코사인 거리, 상관관계 거리, 해밍 거리, 자카드 거리, 스피어만 거리.
mx개(1×n) 행 벡터 x1, x2, ..., xmx로 처리되는 mx×n 데이터 행렬 X와 my개(1×n) 행 벡터 y1, y2, ...,ymy로 처리되는 my×n 데이터 행렬 Y가 주어진 경우, 벡터 xs와 yt 간의 다양한 거리는 다음과 같이 정의됩니다.
유클리드 거리(Euclidean Distance)
유클리드 거리는 p = 2인 민코프스키 거리의 특수한 사례입니다.
Distance
파라미터를'euclidean'
으로 설정하여 유클리드 거리를 지정합니다.표준화된 유클리드 거리
여기서 V는 j번째 대각선 요소가 (S(j))2인 n×n 대각 행렬입니다. S는 각 차원의 스케일링 인자로 구성된 벡터입니다.
Distance
파라미터를'seuclidean'
으로 설정하여 표준화된 유클리드 거리를 지정합니다.고속 유클리드 거리는 유클리드 거리와 동일하며, 예측 변수 개수가 10개 이상인 경우 시간을 줄여주는 대체 알고리즘을 사용하여 계산됩니다. 속도가 더 빠른 이 알고리즘은 정확도가 떨어질 수 있습니다. 희소 형식 데이터를 지원하지 않습니다. 고속 유클리드 거리 알고리즘 항목을 참조하십시오.
Distance
파라미터를'fasteuclidean'
으로 설정하여 고속 유클리드 거리를 지정합니다.표준화된 고속 유클리드 거리는 표준화된 유클리드 거리와 동일하며, 예측 변수 개수가 10개 이상인 경우 시간을 줄여주는 대체 알고리즘을 사용하여 계산됩니다. 속도가 더 빠른 이 알고리즘은 정확도가 떨어질 수 있습니다. 희소 형식 데이터를 지원하지 않습니다. 고속 유클리드 거리 알고리즘 항목을 참조하십시오.
Distance
파라미터를'fastseuclidean'
으로 설정하여 고속 표준화된 유클리드 거리를 지정합니다.마할라노비스 거리
여기서 C는 공분산 행렬입니다.
Distance
파라미터를'mahalanobis'
로 설정하여 마할라노비스 거리를 지정합니다.도시 블록 거리
도시 블록 거리는 p = 1인 민코프스키 거리의 특수한 사례입니다.
Distance
파라미터를'cityblock'
으로 설정하여 도시 블록 거리를 지정합니다.민코프스키 거리
p = 1인 특수한 사례에서 민코프스키 거리는 도시 블록 거리와 동일합니다. p = 2인 특수한 사례에서 민코프스키 거리는 유클리드 거리와 동일합니다. p = ∞인 특수한 사례에서 민코프스키 거리는 체비쇼프 거리와 동일합니다.
Distance
파라미터를'minkowski'
로 설정하여 민코프스키 거리를 지정합니다.체비쇼프 거리
체비쇼프 거리는 p = ∞인 민코프스키 거리의 특수한 사례입니다.
Distance
파라미터를'chebychev'
로 설정하여 체비쇼프 거리를 지정합니다.코사인 거리
Distance
파라미터를'cosine'
으로 설정하여 코사인 거리를 지정합니다.상관관계 거리
여기서
및
Distance
파라미터를'correlation'
으로 설정하여 상관관계 거리를 지정합니다.해밍 거리는 다음과 같이 서로 다른 좌표의 백분율입니다.
Distance
파라미터를'hamming'
으로 설정하여 해밍 거리를 지정합니다.자카드 거리는 0이 아닌 두 좌표의 값이 서로 다른 비율인 자카드 계수를 1에서 뺀 값입니다.
Distance
파라미터를'jaccard'
로 설정하여 자카드 거리를 지정합니다.스피어만 거리는 1에서 관측값 간 표본 스피어만의 순위 상관을 뺀 값입니다(일련의 값으로 처리됨).
여기서
Distance
파라미터를'spearman'
으로 설정하여 스피어만 거리를 지정합니다.
알고리즘
고속 유클리드 거리 알고리즘
fast
로 시작하는 Distance
인수의 값(예: 'fasteuclidean'
및 'fastseuclidean'
)은 계산 시간을 아끼기 위해 추가 메모리를 사용하는 알고리즘을 사용해 유클리드 거리를 계산합니다. 이 알고리즘은 Albanie[1] 및 다른 문헌에서 "Euclidean Distance Matrix Trick"이라고 합니다. 내부 테스트에 따르면 이 알고리즘은 예측 변수 개수가 10개 이상인 경우 시간을 아끼는 것으로 나타났습니다. 'fast'
로 시작하는 알고리즘은 희소 형식 데이터를 지원하지 않습니다.
각 xi가 n개의 변수를 갖는 모든 점 xi와 xj 간 거리의 행렬 D를 구하기 위해 알고리즘은 다음 수식의 마지막 줄을 사용하여 거리를 계산합니다.
수식의 마지막 줄에 있는 행렬 를 그람 행렬이라고 합니다. 제곱과 합으로 제곱 거리를 계산하는 대신 그람 행렬을 계산하고 사용하는 경우 일련의 제곱 거리를 계산하는 것이 더 빠르지만 수치적으로 약간 덜 안정적입니다. 자세한 내용은 Albanie [1] 항목을 참조하십시오.
그람 행렬을 저장하기 위해 디폴트 크기가 1e3
메가바이트인 캐시가 사용됩니다. CacheSize
이름-값 인수를 사용하여 캐시 크기를 설정할 수 있습니다. CacheSize
의 값이 너무 크거나 "maximal"
인 경우, pdist2
는 사용 가능한 메모리를 초과하는 그람 행렬을 할당하려고 시도할 수 있습니다. 이 경우, MATLAB에서 오류를 발생시킵니다.
참고 문헌
[1] Albanie, Samuel. Euclidean Distance Matrix Trick. June, 2019. Available at https://www.robots.ox.ac.uk/%7Ealbanie/notes/Euclidean_distance_trick.pdf.
확장 기능
tall형 배열
메모리에 담을 수 없을 정도로 많은 행을 가진 배열을 계산할 수 있습니다.
사용법 관련 참고 및 제한 사항:
첫 번째 입력 인수
X
는 tall형 배열이어야 합니다. 입력 인수Y
는 tall형 배열일 수 없습니다.
자세한 내용은 tall형 배열 항목을 참조하십시오.
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
거리 입력 인수 값(
Distance
)은 컴파일타임 상수여야 합니다. 예를 들어, 민코프스키 거리를 사용하려면codegen
의-args
값에coder.Constant('Minkowski')
를 포함시키십시오.거리 입력 인수 값(
Distance
)은 사용자 지정 거리 함수일 수 없습니다.pdist2
함수는 이름이fast
로 시작하는 거리 측정법(예:'fasteuclidean'
)을 의미하는 고속 유클리드 거리 계산을 위한 코드 생성을 지원하지 않습니다.이름-값 인수에 지정하는 이름은 컴파일타임 상수여야 합니다. 예를 들어, 생성되는 코드에
'Smallest'
이름-값 쌍의 인수를 사용하려면codegen
(MATLAB Coder)의-args
값에{coder.Constant('Smallest'),0}
을 포함시키십시오.생성된 코드에서 동순위 거리의 정렬 순서는 수치 정밀도로 인해 MATLAB의 순서와 다를 수 있습니다.
pdist2
의 생성된 코드는 생성된 코드에서 지원하는 공유 메모리 다중코어 플랫폼에서 병렬로 실행되도록parfor
(MATLAB Coder)를 사용하여 루프를 생성합니다. 사용 중인 컴파일러가 OpenMP(Open Multiprocessing) 애플리케이션 인터페이스를 지원하지 않거나 사용자가 OpenMP 라이브러리를 비활성화한 경우 MATLAB Coder™는parfor
루프를for
루프로 처리합니다. 지원되는 컴파일러를 확인하려면 지원되는 컴파일러를 참조하십시오. OpenMP 라이브러리를 비활성화하려면 구성 객체의EnableOpenMP
속성을false
로 설정하십시오. 자세한 내용은coder.CodeConfig
(MATLAB Coder)를 참조하십시오.pdist2
는 생성된 독립 실행형 C/C++ 코드에서 정수형(int32
) 인덱스를 반환합니다. 따라서 이 함수는 단정밀도 입력값을 사용할 경우 엄격한 단정밀도를 지원할 수 있습니다. MEX 코드 생성 시, 이 함수는 계속 MATLAB 동작과 일치하는 배정밀도 인덱스를 반환합니다.R2020a 이전:
pdist2
는 생성된 독립 실행형 C/C++ 코드에서 배정밀도 인덱스를 반환합니다.
코드 생성에 대한 자세한 내용은 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
는 컴파일타임 상수여야 합니다.이름-값 쌍의 인수에 지정하는 이름은 컴파일타임 상수여야 합니다.
생성된 코드에서 동순위 거리의 정렬 순서는 수치 정밀도로 인해 MATLAB의 순서와 다를 수 있습니다.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
사용법 관련 참고 및 제한 사항:
Distance
입력 인수를"fasteuclidean"
,"fastsquaredeuclidean"
,"fastseuclidean"
또는 사용자 지정 거리 함수로 지정할 수 없습니다.
자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2010a에 개발됨참고 항목
pdist
| createns
| knnsearch
| ExhaustiveSearcher
| KDTreeSearcher
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)