📄 kd_recurse.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% Build recursevily the leaf nodes of tree %%%%%
%%%%%% %%%%%
%%%%%% Kostas Blekas, 19 Dec. 2001 %%%%%
%%%%%% please contact at kblekas@cc.uoi.gr in case of problems %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [C,CP,InC] = kd_recurse(X,I,C,CP,InC,b,alpha,L,W,thres)
XI = X(I,:);
ni = size(XI,1);
bgen = zeros(L,W);
for i = 1:W
ll = zeros(L,1);
for j = 1:L
ll(j) = size(find(XI(:,i)==alpha(j)),1);
if (ll(j)==0)
ll(j) = 0.000001;
end
end
bgen(:,i) = ll ./ sum(ll);
end
[max1,t1]=max(bgen);
cr1 = size(find(max1>0.5),2);
if (ni > 0 & ni <= b)
[r,deg] = bestpos(XI,ni,W,thres);
end
if ( (ni > 0 & ni <= b) & (deg==1) )
C = [C; XI(r,:)];
x1 = -1 * ones(1,b);
x1(1:ni) = I;
InC = [InC; x1];
bgen = bgen + 0.0001;
for i=1:W
bgen(:,i) = bgen(:,i) ./ sum(bgen(:,i));
end
CP = [CP; bgen];
else
k1 = repmat(max(bgen),L,1); % creates a LxW matrix with the maximum values at each column
[m1,pos]=min(sum((bgen - k1).^2)); % position of largest scatter
[b1,inds] = sort(bgen(:,pos)); % sorting by frequency
part1 = zeros(ni,1);
part2 = zeros(ni,1);
for i=L:-2:2
part1(find(XI(:,pos)==alpha(inds(i))))=1;
part2(find(XI(:,pos)==alpha(inds(i-1))))=1;
end
Ileft = I(find(part1==1));
Iright = I(find(part2==1));
% recursively call kd-tree on subpartitions
[C,CP,InC] = kd_recurse(X,Ileft,C,CP,InC,b,alpha,L,W,thres);
[C,CP,InC] = kd_recurse(X,Iright,C,CP,InC,b,alpha,L,W,thres);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -