找到重复单元格数组

gab*_*how 5 matlab cell

我有一个单元格数组

 A = {'hello'; 2; 3; 4; 'hello';2;'hello'}
Run Code Online (Sandbox Code Playgroud)

我想找到这个数组中是否有重复,并确定它们的名称和索引.在这个例子中,我希望有类似的东西:

names = {'hello';2};
indexes = [1, 5, 7;
         2, 6, 0];
Run Code Online (Sandbox Code Playgroud)

我把第二行索引的最后一个元素放到0只是为了没有维度问题...我的问题是单元格数组既是char又是double ...我不知道如何处理这个...

Lui*_*ndo 2

虽然很乱,但是可以做到:

m = max(cellfun(@length, A));
A2 = cellfun(@(e) [double(e) inf(1,m-length(e)) ischar(e)], A, 'uni' ,false);
A2 = cell2mat(A2);
[~, ~, jj] = unique(A2,'rows');
num = accumarray(jj,1,[],@numel);
[~, kk] = max(bsxfun(@eq, jj, find(num>1).'));
names = A(kk);
indices = arrayfun(@(n) find(jj==jj(kk(n))), 1:length(kk), 'uni', false);
Run Code Online (Sandbox Code Playgroud)

这是如何工作的A2只是A转换为数字矩阵。每行代表 的一个条目A,最后一列用作区分原始数字和原始字符串的标志,并inf用作填充符。然后,通常的夫妇unique进行实际工作,并通过一些比较和索引accumarray获得结果。jjnum