function m=dualmean(varargin)
% DUALMEAN Computes dual representation of mean vector.
%
% Synopsis:
% m = dualmean(num_data)
% m = dualmean(labels,y)
%
% Description:
% This function computes a vector m which allows to express the mean
% vector of data sample X [dim x num_data] in terms of dot products.
%
% m = dualmean(num_data) computes a vector m [num_data x 1] such that
% mean(X,2) = X*m.
%
% m = dualmean(labels,y) computes a vector m [length(y) x 1] such that
% mean(X(:,find(labels==y)),2) = X*m,
%
% where labels [1 x num_data] is a vector of data labels and y [1x1]
% is a label od class which mean vector is to be computed.
%
% Example:
% Unlabeled data:
% data = load('riply_trn');
% ma = mean( data.X, 2)
% mb = data.X*dualmean(size(data.X,2))
%
% Labeled data:
% data = load('riply_trn');
% ma1 = mean( data.X(:,find(data.y==1)),2)
% mb1 = data.X*dualmean(data.y,1)
% ma2 = mean( data.X(:,find(data.y==2)),2)
% mb2 = data.X*dualmean(data.y,2)
%
% See also
% DUALCOV.
%
% About: Statistical Pattern Recognition Toolbox
% (C) 1999-2003, Written by Vojtech Franc and Vaclav Hlavac
% <a href="http://www.cvut.cz">Czech Technical University Prague</a>
% <a href="http://www.feld.cvut.cz">Faculty of Electrical Engineering</a>
% <a href="http://cmp.felk.cvut.cz">Center for Machine Perception</a>
% Modifications:
% 16-may-2004, VF
% 14-may-2004, VF
% 22-Jan-2003, VF
% 22-May-2001, V. Franc, created
if nargin == 2,
labels = varargin{1};
y = varargin{2};
num_data = length(labels);
m = zeros(num_data,1);
inx = find(labels==y);
m(inx) = ones(length(inx),1)/length(inx);
else
num_data = varargin{1};
m = ones(num_data,1)/num_data;
end
return;