高级搜索和删除特殊矩阵

时间:2016-08-10 01:07:38

标签: matlab

我有这个矩阵

X= [2 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 1 250;
    3 0 0 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 250;
    2 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 1 250;
    3 0 0 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 250;
    4 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 250;
    3 0 0 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 250;
    2 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 1 250;
    4 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 250;
    3 0 0 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 250;
    3 1 1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 1 0 0 400]

我需要在这个矩阵中做三个不同的序列事项:

1-在此矩阵中搜索以下序列1 1 0 0 0并在新矩阵中写入具有此特征的行(如第1行)。

2-使用在第一步中生成的矩阵并从中移除到相同数字中具有相同数字的行(如行1,3,7),但同时只保留一行一个(在行1,3,7的情况下保持第1行并删除其他行)。

3-使用在第二步中生成的矩阵,并从该矩阵中删除具有以下序列1 1 1的任何行(如第8行),并将此矩阵中的其他行放入新矩阵中。

1 个答案:

答案 0 :(得分:1)

%Step-1
% Converting the matrix into a string, appending a semi-colon for similarity and removing the brackets from the string
req=mat2str(X);      req(end)=';'       ;   req=req(2:end);
% Searching the sequence: 1 1 0 0 0
sp1=strfind(req, '1 1 0 0 0');
% Storing those rows of X in req matrix which contain the sequence
req=X(unique(ceil([sp1]/(size(req,2)/size(X,1)))),:);


%Step-2
req= unique(req,'rows');

%Step-3
% Converting the matrix into a string, appending a semi-colon for similarity and removing the brackets from the string
reqtemp=mat2str(req);   reqtemp(end)=';'  ;    reqtemp=reqtemp(2:end);
% Searching the sequence: 1 1 1
sp1=strfind(reqtemp, '1 1 1');
% Removing those rows which contain the sequence
req(unique(ceil([sp1]/(size(reqtemp,2)/size(req,1)))),:)=[];