我有一个尺寸为 m * k
的单元数组 A
。
我想保持 A
的行在k个单元格的顺序上唯一。
“棘手”的部分是“在k个单元格的顺序上唯一”:考虑 A(i,:)
中第 i
行的 k
个单元格;可能会存在一行 j
,A(j,:)
与 A(i,:)
等效,只是其 k
个单元格重新排列,例如如果 k=4
,则可能是这样的:
A{i,1}=A{j,2}
A{i,2}=A{j,3}
A{i,3}=A{j,1}
A{i,4}=A{j,4}
我现在正在做的是:
G=[0 -1 1; 0 -1 2; 0 -1 3; 0 -1 4; 0 -1 5; 1 -1 6; 1 0 6; 1 1 6; 2 -1 6; 2 0 6; 2 1 6; 3 -1 6; 3 0 6; 3 1 6];
h=7;
M=reshape(G(nchoosek(1:size(G,1),h),:),[],h,size(G,2));
A=cell(size(M,1),2);
for p=1:size(M,1)
A{p,1}=squeeze(M(p,:,:));
left=~ismember(G, A{p,1}, 'rows');
A{p,2}=G(left,:);
end
%To find equivalent rows up to order I use a double loop (VERY slow).
indices=[];
for j=1:size(A,1)
if ismember(j,indices)==0 %if we have not already identified j as a duplicate
for i=1:size(A,1)
if i~=j
if (isequal(A{j,1},A{i,1}) || isequal(A{j,1},A{i,2}))...
&&...
(isequal(A{j,2},A{i,1}) || isequal(A{j,2},A{i,2}))...
indices=[indices;i];
end
end
end
end
end
A(indices,:)=[];
它能够工作,但速度太慢了。我希望有更快的替代方案可供使用。
p
,A{p,1}
和A{p,2}
的大小是否总是相等的?换句话说,G
是否总是被平均分成左右两个单元格? - erfan