我在Matlab中有一个mx4
单元格A
。
A{j,1}
是2x2
矩阵。
A{j,2}
是2x2
矩阵。
A{j,3}
是2x2
矩阵。
A{j,4}
是1x2
矩阵。
E.g。何时m=4
A{1,1}=[0 -1; 1 1]
A{1,2}=[1 0; 2 1]
A{1,3}=[2 0; 3 1]
A{1,4}=[3 0]
A{2,1}=[0 5; 1 1]
A{2,2}=[1 0; 2 1]
A{2,3}=[2 4; 3 1]
A{2,4}=[1 0]
A{3,1}=[2 0; 3 1]
A{3,2}=[1 0; 2 1]
A{3,3}=[0 -1; 1 1]
A{3,4}=[3 0]
A{4,1}=[3 1; 2 0]
A{4,2}=[2 1; 1 0]
A{4,3}=[0 -1; 1 1]
A{4,4}=[3 0]
我想要一个保持唯一序列A{j,1} A{j,2} A{j,3} A{j,4}
(1)没有区别 在序列之间具有相同的4个组件但顺序不同
(2)区分具有相同4个组件的序列,直到每个组件中行向量的重新排序
例如,关于上面的单元格A
,算法应保留
A{1,1}=[0 -1; 1 1]
A{1,2}=[1 0; 2 1]
A{1,3}=[2 0; 3 1]
A{1,4}=[3 0]
A{2,1}=[0 5; 1 1]
A{2,2}=[1 0; 2 1]
A{2,3}=[2 4; 3 1]
A{2,4}=[1 0]
A{4,1}=[3 1; 2 0]
A{4,2}=[2 1; 1 0]
A{4,3}=[0 -1; 1 1]
A{4,4}=[3 0]
答案 0 :(得分:0)
你可以试试这个
solutionvector=true(size(A(:,1))); %assue all a different
[~,b,c]=unique(cell2mat(A(:,4)),'rows');%find which {j,4} are the same
for i=1:max(c) %go throuth each unique A{j,4}
if sum(c==i)>1 %if there is more than one entry
for j=1:sum(c==i)-1 %for the amount of equal entries minus the last
entries=find(c==i); %get the indicies of the following entries
for k=j+1:sum(c==i) %compare the following entries with j
if( any(arrayfun(@(x) isequal(A(entries(j),1),x),A(entries(k),1:3))) && ...
any(arrayfun(@(x) isequal(A(entries(j),2),x),A(entries(k),1:3))) && ...
any(arrayfun(@(x) isequal(A(entries(j),3),x),A(entries(k),1:3)))) %check if each of the A{j,1:3} is in A(k,1:3)
solutionvector(entries(k))=false; %delete it in the solution vector and
c(entries(k))=0; %delete it from the check list
end
end
end
end %end if c==i>1
end
B=A(solutionvector,:);%only get the cells hat are left
如果工作正常,请检查更大的样本