顺序不重要的独特单元格对
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-BB
和 BB-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);
我有一个字符串对的元胞数组:
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-BB
和 BB-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);