pdist
観測値ペア間のペアワイズ距離
説明
例
ユークリッド距離の計算と距離ベクトルから行列への変換
観測値ペア間のユークリッド距離を計算し、squareform
を使用して距離ベクトルを行列に変換します。
3 つの観測値と 2 つの変数を使用して行列を作成します。
rng('default') % For reproducibility X = rand(3,2);
ユークリッド距離を計算します。
D = pdist(X)
D = 1×3
0.2954 1.0670 0.9448
ペアワイズ距離は (2,1)、(3,1)、(3,2) という順序で編成されます。観測値 i
および j
の間の距離は、squareform
を使用すると簡単に求めることができます。
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
は同じです。
ミンコフスキー距離の計算
3 つの観測値と 2 つの変数を使用して行列を作成します。
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
カスタム距離関数の使用による、欠損要素があるペアワイズ距離の計算
NaN
値がある座標を無視するカスタム距離関数を定義し、この関数を使用してペアワイズ距離を計算します。
3 つの観測値と 2 つの変数を使用して行列を作成します。
rng('default') % For reproducibility X = rand(3,2);
1 番目の観測値の 1 番目の要素が欠損していると仮定します。
X(1,1) = NaN;
ユークリッド距離を計算します。
D1 = pdist(X)
D1 = 1×3
NaN NaN 0.9448
観測値 i
または j
に NaN
値が含まれている場合、関数 pdist
は i
と j
の間のペアワイズ距離として NaN
を返します。したがって、(2,1) と (3,1) のペアワイズ距離である D1(1) および D1(2) は 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);
pdist
の入力引数として関数ハンドルを渡すことにより、naneucdist
で距離を計算します。
D2 = pdist(X,@naneucdist)
D2 = 1×3
0.3974 1.1538 0.9448
入力引数
X
— 入力データ
数値行列
入力データ。m 行 n 列の数値行列を指定します。行は各観測値に、列は各変数に対応します。
データ型: single
| double
Distance
— 距離計量
文字ベクトル | string スカラー | 関数ハンドル
距離計量。次の表に記載されているように文字ベクトル、string スカラーまたは関数ハンドルを指定します。
値 | 説明 |
---|---|
'euclidean' | ユークリッド距離 (既定の設定)。 |
'squaredeuclidean' | 2 乗ユークリッド距離(効率向上のみを目的に提供されているオプション。三角不等式は満たさない)。 |
'seuclidean' | 標準化されたユークリッド距離。観測値間の各座標差は、標準偏差 |
'mahalanobis' |
|
'cityblock' | 市街地距離。 |
'minkowski' | ミンコフスキー距離。既定の指数は 2 です。異なる指数 |
'chebychev' | チェビシェフ距離 (最大座標差)。 |
'cosine' | 1 から、ベクトルとして扱われる点の間の夾角の余弦を引いた値。 |
'correlation' | 1 から、値の系列として扱われる点の間の標本相関を引いた値。 |
'hamming' | 異なる座標の比率を示すハミング距離。 |
'jaccard' | 1 から、ジャカード係数 (異なる非ゼロ座標の比率) を引いた値。 |
'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
— ペアワイズ距離
数値行ベクトル
ペアワイズ距離。観測値のペアに対応する、長さ 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)
は、Z(i,j)
が観測値 i および j の間のペアワイズ距離に対応する、m 行 m 列の行列を返します。
観測値 i または j に NaN
が含まれている場合、組み込み距離関数では D
内の対応する値が NaN
になります。
通常、D
はクラスタリングまたは多次元尺度構成法で非類似度行列として使用されます。詳細については、階層クラスタリングと、関数 cmdscale
、cophenet
、linkage
、mdscale
および optimalleaforder
のリファレンス ページを参照してください。これらの関数は入力引数として D
を受け入れます。
詳細
距離計量
距離計量は、2 つの観測値の間の距離を定義する関数です。pdist
は、以下の各種距離計量、ユークリッド距離、標準化されたユークリッド距離、マハラノビス距離、市街地距離、ミンコフスキー距離、チェビシェフ距離、コサイン距離、相関距離、ハミング距離、Jaccard 距離およびスピアマン距離をサポートします。
m 個の (1 行 n 列の) 行ベクトル x1、x2、...、xm として扱われる m 行 n 列のデータ行列 X
に対して、ベクトル xs と xt の間で各種の距離は次のように定義されます。
ユークリッド距離
ユークリッド距離はミンコフスキー距離の特殊なケース、p = 2 の場合です。
標準化されたユークリッド距離
ここで、V は j 番目の対角要素が (S(j))2 である n 行 n 列の対角行列です。S は各次元のスケーリング係数のベクトルです。
マハラノビス距離
ここで、C は共分散行列です。
市街地距離
市街地距離はミンコフスキー距離の特殊なケース、p = 1 の場合です。
ミンコフスキー距離
p = 1 という特殊なケースでは、ミンコフスキー距離は市街地距離を与えます。p = 2 という特殊なケースでは、ミンコフスキー距離はユークリッド距離を与えます。p = ∞ という特殊なケースでは、ミンコフスキー距離はチェビシェフ距離を与えます。
チェビシェフ距離
チェビシェフ距離はミンコフスキー距離の特殊なケース、p = ∞ の場合です。
コサイン距離
相関距離
ここで
および です。
ハミング距離
Jaccard 距離
スピアマン距離
ここで
rsj は、
tiedrank
により計算される、x1j、x2j、... xmj から取得された xsj の順位です。rs および rt は、xs および xt の座標単位の順位ベクトルです。つまり、rs = (rs1, rs2, ... rsn) です。
.
.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
距離の入力引数 (
Distance
) の値は、コンパイル時の定数でなければなりません。たとえば、ミンコフスキー距離を使用するには、coder.Constant('Minkowski')
をcodegen
の-args
の値に含めます。距離の入力引数 (
Distance
) の値をカスタム距離関数にすることはできません。pdist
に対して生成されるコードでは、parfor
(MATLAB Coder) を使用して、サポートされる共有メモリ マルチコア プラットフォームで並列実行されるループが作成されます。コンパイラが Open Multiprocessing (OpenMP) アプリケーション インターフェイスをサポートしない場合、または OpenMP ライブラリを無効にした場合、MATLAB® Coder™ はparfor
ループをfor
ループとして扱います。サポートされるコンパイラについては、サポートされるコンパイラを参照してください。OpenMP ライブラリを無効にするには、構成オブジェクトのEnableOpenMP
プロパティをfalse
に設定します。詳細については、coder.CodeConfig
(MATLAB Coder) を参照してください。
コード生成の詳細については、コード生成の紹介および一般的なコード生成のワークフローを参照してください。
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 コマンド ウィンドウに入力して実行してください。Web ブラウザーは 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)