| Description of slgaussmdist |
slgaussmdist
PURPOSE 
SLGAUSSMDIST Computes the Malanobis distance between samples and centers
SYNOPSIS 
function dists = slgaussmdist(GS, X)
DESCRIPTION 
CROSS-REFERENCE INFORMATION 
This function calls:
- slmetric_pw SLMETRIC_PW Compute the metric between column vectors pairwisely
- slgausstype SLGAUSSTYPE Judges the type of a Gaussian model struct
- raise_lackinput RAISE_LACKINPUT Raises an error indicating lack of input argument
This function is called by:
- slgausspdf SLGAUSSPDF Computes the probability density of Gaussian models
SUBFUNCTIONS 
SOURCE CODE 
0001 function dists = slgaussmdist(GS, X)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026 if nargin < 2
0027 raise_lackinput('slgaussmdist', 2);
0028 end
0029
0030 if ~isnumeric(X) || ndims(X) ~= 2
0031 error('sltoolbox:invalidarg', ...
0032 'The X should be a 2D numeric matrix');
0033 end
0034
0035 tyi = slgausstype(GS);
0036
0037 if ~tyi.hasinv
0038 error('sltoolbox:invalidarg', ...
0039 'GS should have inverse variance/covariance computed');
0040 end
0041
0042 [d, n] = size(X);
0043 if d ~= GS.dim
0044 error('sltoolbox:sizmismatch', ...
0045 'The dimension of samples does not match that of the models');
0046 end
0047
0048 k = GS.nmodels;
0049
0050
0051
0052 switch tyi.varform
0053 case 'univar'
0054 if tyi.sharevar
0055 dists = compmdist_univar(GS.means, X, GS.invvars);
0056 else
0057 dists = zeros(k, n);
0058 for i = 1 : k
0059 dists(i, :) = compmdist_univar(GS.means(:,i), X, GS.invvars(i));
0060 end
0061 end
0062 case 'diagvar'
0063 if tyi.sharevar
0064 dists = compmdist_diagvar(GS.means, X, GS.invvars);
0065 else
0066 dists = zeros(k, n);
0067 for i = 1 : k
0068 dists(i, :) = compmdist_diagvar(GS.means(:,i), X, GS.invvars(:,i));
0069 end
0070 end
0071 case 'covar'
0072 if tyi.sharevar
0073 dists = compmdist_covar(GS.means, X, GS.invcovs);
0074 else
0075 dists = zeros(k, n);
0076 for i = 1 : k
0077 dists(i, :) = compmdist_covar(GS.means(:,i), X, GS.invcovs(:,:,i));
0078 end
0079 end
0080 end
0081
0082
0083
0084
0085 function dists = compmdist_univar(M, X, invvar)
0086
0087 dists = slmetric_pw(M, X, 'sqdist');
0088 dists = dists * invvar;
0089 dists = sqrt(max(dists, 0));
0090
0091 function dists = compmdist_diagvar(M, X, invvars)
0092
0093 dists = slmetric_pw(M, X, 'wsqdist', invvars);
0094 dists = sqrt(max(dists, 0));
0095
0096 function dists = compmdist_covar(M, X, invcovs)
0097
0098 dists = slmetric_pw(M, X, 'quaddiff', invcovs);
0099 dists = sqrt(max(dists, 0));
0100
0101
0102
0103
0104
0105
Generated on Wed 20-Sep-2006 12:43:11 by m2html © 2003
|
|