需仔细阅读代码头的注释
function [op]=Class1D_Plus(num1D,tol)
%Class1D_Plus([1;2;7;14;18;50;61;62;99;200;321;322;322],1.5)
%输入的数据要是不存在0元素的数据,可以有重复元素
%对输入的一维数组num1D分类(y值),如果相邻两点的距离
%num1D是列向量
%小于tol,则被划分为同一列,不足的补0
%输出的是一个矩阵,每一列都表示是一类
%如果所有相邻的两个数的差值都大于tol,则返回[];
%注意tol是大于0的正数;
%同一类元素重复次数加小于delta的元素个数不能超过8(这意味着出现了超过8重简并的情况)
%对输入的列数据长度无要求
tic
judge0=0;%初始化
if length(unique(num1D))~=length(num1D)
disp('输入的数据存在重复元素!');
mat0=Repsta(num1D);
lie_mat0=size(mat0,2);%mat0的列数
judge0=1;%若为1,表示存在重复元素
end
sort_num1D=sort(num1D);%从小到大
Delta=abs(sort_num1D(2:end)-sort_num1D(1:end-1));
judge=(Delta<tol);%列
if unique(judge)==0
op=[];
else
count=1;
tcol=[];
tMat=[];
for zz=1:(length(sort_num1D)-1)
delta=sort_num1D(zz+1)-sort_num1D(zz);
if delta<tol
tcol=[tcol;sort_num1D(zz+1);sort_num1D(zz)];
else
if length(unique(tcol))~=8
tcol=[unique(tcol);zeros(8-length(unique(tcol)),1)];
end
tMat(:,count)=tcol;
count=count+1;
tcol=[];
end
end
if length(unique(tcol))~=8
tcol=[unique(tcol);zeros(8-length(unique(tcol)),1)];
else
if length(unique(tcol))==8
tcol=[unique(tcol)];
end
end
if isempty(tMat)==1
tMat=[(tcol)];
else
tMat=[tMat,tcol];
end
tMat(:,all(tMat==0))=[];%删除全0列
op=tMat;
%=========================
%=========================
if judge0==1%存在重复元素
op2=op;
for ww=1:lie_mat0
Repnum=mat0(1,ww);%重复的元素
Repcount=mat0(2,ww);%重复的次数
[~,lie]=find(op2==Repnum);
t_lie=sort(unique(op2(:,lie)));%列数据
t_lie(t_lie==0)=[];%删除0元素
t_lie=[sort([t_lie;Repnum*ones(Repcount-1,1)]);zeros(8-length(t_lie)-Repcount+1,1)];
op2(:,lie)=t_lie;
end
op=op2;
end
end
toc
end
function [op]=Repsta(col_num)
%Repsta([1;2;3;4;4;1;1;1;6;7;9;0;0;12;13;12;3])
%输入一个列向量col_num
%输出一个矩阵op
%op的大小为两行n列
%第一行是重复的元素
%第二行是对应元素重复的次数
%如果没有重复的元素,返回空集矩阵
unique_col_num=unique(col_num);
len_uni_col_num=length(unique_col_num);
len_col_num=length(col_num);
if len_uni_col_num==len_col_num
op=[];
else
count=0;
for xx=1:len_uni_col_num
tp=unique_col_num(xx);
Site=find(col_num==tp);%位置
len_Site=length(Site);
if len_Site>1
count=count+1;
op(1:2,count)=[tp;len_Site];
end
end
end
end
未详细测试,如有错误欢迎指出
版权声明:本文为jack_BOB_LUO原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。