Rev | Line | |
---|
[37] | 1 | function m = sqdist(p, q, A) |
---|
| 2 | % SQDIST Squared Euclidean or Mahalanobis distance. |
---|
| 3 | % SQDIST(p,q) returns m(i,j) = (p(:,i) - q(:,j))'*(p(:,i) - q(:,j)). |
---|
| 4 | % SQDIST(p,q,A) returns m(i,j) = (p(:,i) - q(:,j))'*A*(p(:,i) - q(:,j)). |
---|
| 5 | |
---|
| 6 | % Written by Tom Minka |
---|
| 7 | |
---|
| 8 | [d, pn] = size(p); |
---|
| 9 | [d, qn] = size(q); |
---|
| 10 | |
---|
| 11 | if pn == 0 || qn == 0 |
---|
| 12 | m = zeros(pn,qn); |
---|
| 13 | return |
---|
| 14 | end |
---|
| 15 | |
---|
| 16 | if nargin == 2 |
---|
| 17 | |
---|
| 18 | pmag = col_sum(p .* p); |
---|
| 19 | qmag = col_sum(q .* q); |
---|
| 20 | m = repmat(qmag, pn, 1) + repmat(pmag', 1, qn) - 2*p'*q; |
---|
| 21 | %m = ones(pn,1)*qmag + pmag'*ones(1,qn) - 2*p'*q; |
---|
| 22 | |
---|
| 23 | else |
---|
| 24 | |
---|
| 25 | Ap = A*p; |
---|
| 26 | Aq = A*q; |
---|
| 27 | pmag = col_sum(p .* Ap); |
---|
| 28 | qmag = col_sum(q .* Aq); |
---|
| 29 | m = repmat(qmag, pn, 1) + repmat(pmag', 1, qn) - 2*p'*Aq; |
---|
| 30 | |
---|
| 31 | end |
---|
Note: See
TracBrowser
for help on using the repository browser.