0001 function [centers, mincenter, mindist, lower, computed] = anchors(firstcenter,k,data)
0002
0003
0004
0005 [n,dim] = size(data);
0006 centers = zeros(k,dim);
0007 lower = zeros(n,k);
0008 mindist = Inf*ones(n,1);
0009 mincenter = ones(n,1);
0010 computed = 0;
0011 centdist = zeros(k,k);
0012
0013 for j = 1:k
0014 if j == 1
0015 newcenter = firstcenter;
0016 else
0017 [maxradius,i] = max(mindist);
0018 newcenter = data(i,:);
0019 end
0020
0021 centers(j,:) = newcenter;
0022 centdist(1:j-1,j) = calcdist(centers(1:j-1,:),newcenter);
0023 centdist(j,1:j-1) = centdist(1:j-1,j)';
0024 computed = computed + j-1;
0025
0026 inplay = find(mindist > centdist(mincenter,j)/2);
0027 newdist = calcdist(data(inplay,:),newcenter);
0028 computed = computed + size(inplay,1);
0029 lower(inplay,j) = newdist;
0030
0031
0032
0033
0034
0035
0036 move = find(newdist < mindist(inplay));
0037 shift = inplay(move);
0038 mincenter(shift) = j;
0039 mindist(shift) = newdist(move);
0040 end
0041
0042
0043
0044
0045
0046