顺序不重要的独特单元格对

unique pair of cells where order is not important

我有一个字符串对的元胞数组:

str={'A','BB','A','A'}
pairs=str(nchoosek(1:numel(str),2));

pairs =
6×2 cell array

{'A' }    {'BB'}
{'A' }    {'A' }
{'A' }    {'A' }
{'BB'}    {'A' }
{'BB'}    {'A' }
{'A' }    {'A' }

并且我希望能够为唯一对建立一个索引,而不管顺序如何,因为 A-BBBB-A 是同一对。函数 unique 只给出唯一标签 A,BB.

当我尝试 unique(cell2mat(pairs),'rows') 时出现错误,因为“被连接的数组的维度不一致”。

当我尝试 table2cell(unique(cell2table(pairs))) 时,顺序很重要,我得到

3×2 cell array
{'A' }    {'A' }
{'A' }    {'BB'}
{'BB'}    {'A' }

我希望能够 find \ ismember 这样只有

{'A' }    {'A' }
{'A' }    {'BB'}

是唯一的,A-BB 的索引也包含 BB-A 的情况。 请帮忙?

您可以使用 sort(..., 2)pairs 的每一行中进行排序,然后将 unique(... 'rows') 应用于两个输出。但是,sort 的使用不适用于 char 向量元胞数组。解决方法是转成字符串数组:

[result, index_unique, index_repeated] = unique(sort(string(pairs), 2), 'rows');

如果您需要将结果作为字符向量元胞数组,您可以转换回来:

result = arrayfun(@char, result, 'UniformOutput', false);