Найти уникальные строки массива ячеек с учетом всех возможных перестановок в каждой строке
У меня есть клеточный массивA
измеренияm * k
.
Я хочу сохранить рядыA
уникальныйдо порядка k клеток.
"Хитрая" часть"до порядка k ячеек": рассмотретьk
клетки вi
й рядA
, A(i,:)
; мог быть рядj
изA
, 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,:)=[];
Это работает, но это слишком медленно. Я надеюсь, что есть что-то быстрее, что я могу использовать.