Line | |
---|
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.