input: vector of data points, single center or multiple centers output: vector of distances (C) Charles Elkan
0001 function distances = calcdist(data,center) 0002 % input: vector of data points, single center or multiple centers 0003 % output: vector of distances 0004 % (C) Charles Elkan 0005 0006 [n,dim] = size(data); 0007 [n2,dim2] = size(center); 0008 0009 % Using repmat is slower than using ones(n,1) 0010 % delta = data - repmat(center,n,1); 0011 % delta = data - center(ones(n,1),:); 0012 % The following is fastest: not duplicating the center at all 0013 0014 if n2 == 1 0015 distances = sum(data.^2, 2) - 2*data*center' + center*center'; 0016 elseif n2 == n 0017 distances = sum( (data - center).^2 ,2); 0018 else 0019 error('bad number of centers'); 0020 end 0021 0022 % Euclidean 2-norm distance: 0023 distances = sqrt(distances); 0024 0025 % Inf-norm distance: 0026 % distances = max(abs(distances),[],2);