Найти уникальные строки массива ячеек с учетом всех возможных перестановок в каждой строке

У меня есть клеточный массив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,:)=[];

Это работает, но это слишком медленно. Я надеюсь, что есть что-то быстрее, что я могу использовать.

Ответы на вопрос(3)

Ваш ответ на вопрос