1

の使用に慣れているため、問題のコードの記述を視覚化するのに苦労していpdistます。

私がやりたいのは、ベクトルのすべての非絶対距離を計算することです。私のメトリックが(xy)になるように、xとyは私のベクトルの2つの値です。

通常、私は次のことを行います。 squareform(pdist(X(:,i))

ただし、これは私の距離ではなく、EUCLIDEAN 距離を返します。pdistでこれを行う方法はありますか? それとも、別の方法がありますか?

これが私が計算しようとしているものの例です。

為にX=[1,2,3;4,5,6;7,8,9]

FIRST 行列の場合、最初の列の要素のすべての差の行列である必要があります。

D=[(1-1), (1-4), (1-7); (4-1), (4-4), (4-7); (7-1), (7-4), (7-7)]

また

D=[0,-3,-6;3,0,-3;6,3,0]

4

1 に答える 1

0

の "city block" メトリックを試してみたいと思うかもしれませんpdist:

pdist(X,'cityblock')

これは近いですが、必要なものではありません。独自の距離関数を定義して、次のように使用できます。

distfun = @(XI,XJ) sum(bsxfun(@minus,XI,XJ),2); % swap XI,XJ if needed
D = squareform(pdist(X,distfun))

必要な非絶対距離メトリックは対称ではなくpdist、行列の三角形の半分のみを計算し、squareform強制的に対称にすることに注意してください。それが望ましくない場合は、ループを試してください。

>> X = [1 2 3; 4 5 6; 7 8 9];
>> D = zeros(size(X,1),size(X,1));
>> % for i=1:size(X,1), D(:,i)=sum(bsxfun(@minus,X,X(i,:)),2); end % my guess
>> % but to get the desired result, here's the appropriate loop:
>> for i=1:size(X,1), D(:,i) = sum(bsxfun(@minus,X,X(:,i)),1); end
>> disp(D)
     0    -3    -6
     3     0    -3
     6     3     0

編集: OP サンプル データと目的のマトリックスのソリューション。

于 2013-10-12T01:57:29.400 に答える