问题如下:
我有一个 indx{jj}
形式的元胞数组,其中每个 jj
是一个 1xNjj
数组,这意味着它们都有不同的大小。在我的情况下 max(jj)==3
,但让我们考虑一下摇晃它的一般情况。
您如何以最快的方式找到在所有 jj i 中重复的值?
我可以猜测如何使用多个 for 循环来实现,但是是否有“一(三个?)衬里”?
简单的例子:
indx{1}=[ 1 3 5 7 9];
indx{2}=[ 2 3 4 1];
indx{3}=[ 1 2 5 3 3 5 4];
ans=[1 3];
最佳答案
几乎没有循环的方法(几乎是因为 cellfun
本质上在其中使用了循环,但这里的影响很小,因为我们使用它来查找每个单元格中的元素数量)-
lens = cellfun(@numel,indx);
val_ind = bsxfun(@ge,lens,[1:max(lens)]');
vals = horzcat(indx{:});
mat1(max(lens),numel(lens))=0;
mat1(val_ind) = vals;
unqvals = unique(vals);
out = unqvals(all(any(bsxfun(@eq,mat1,permute(unqvals,[1 3 2]))),2));
关于matlab - 在不同大小的不同单元格数组中查找重复值的最快方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25851305/