寻找子集一维数组在母集一维数组中的位置(注意只适用于特定关系数组,未详细测试)

function [op]=Find(subset,bigset)
%Find([1,1,1],[3,4,16,4,4,2,9,9,9,9,9,9,1,1,1])
%寻找子集在母集合中的位置,注意返回的位置顺序和subset的顺序一样
%注意输入的是行向量
%注意这个函数只是适用于特定问题!!!!!!!!!!

staMat=Repsta(subset.');

if isempty(staMat)==1%说明subset没有重复的元素
    op=zeros(1,length(subset));
for uu=1:length(subset)
    op(1,uu)=find(bigset==subset(uu));
    
end

else%说明有重复的元素
    
    Repnums=staMat(1,:);%重复的元素
    op=zeros(1,length(subset));
    
    for vv=1:length(Repnums)
        op(1,subset==Repnums(vv))=(find(bigset==Repnums(vv)));
    end
   
    for ww=1:length(subset)
        
     if ismember(subset(ww),Repnums)==0%不是重复的元素
         op(1,ww)=(find(bigset==subset(ww)));
     end
      
    end
    
end

%%%%%代码测试%%%%%%%%%
if unique(bigset(op)-subset)==0
    disp('结果正确')
end

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值