问题如下:

我有一个 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/

10-11 16:43