function [class,type]=dbscan_(x,k,Eps)
[m,n]=size(x);
if nargin<3 | isempty(Eps)
[Eps]=epsilon(x,k); %分析可能的邻域半径 Eps,关于函数 epsilon,见下面的论述
end
x=[[1:m]' x]; %为每个数据点添加编号,其实是合并两个矩阵
[m,n]=size(x);
type=zeros(1,m);
no=1;
touched=zeros(m,1); %标记某数据点是否已被访问
for i=1:m
if touched(i)==0;
ob=x(i,:);
D=dist(ob(2:n),x(:,2:n)); %使用下面的 dist 函数生成针对当前点的距离矩阵
ind=find(D<=Eps); %见下面的论述
if length(ind)>1 & length(ind)<k+1
type(i)=0;
class(i)=0;
end
if length(ind)==1
type(i)=-1;
class(i)=-1;
touched(i)=1;
评论0