本文介绍了在不同大小的不同像元阵列中查找重复值的最快方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题如下:

我有一个格式为indx{jj}的单元格数组,其中每个jj是一个1xNjj数组,这意味着它们的大小都不同.就我而言,max(jj)==3,但让我们考虑一下它的一般情况.

I have a cell array of the form indx{jj} where each jj is an array of 1xNjj, meaning they all have different size. In my case max(jj)==3, but lets consider a general case for the shake of it.

您将如何找到以最快方式在所有jj中重复的值?

How would you find the value(s) repeated in all the jj i the fastest way?

我可以猜测如何使用多个for循环,但是有一个(三个?)衬里"吗?

I can guess how to do it with several for loops, but is there a "one (three?) liner"?

简单的例子:

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本质上在其中使用了循环),但是这里的作用很小,因为我们使用它来查找只是每个单元格中元素的数量)-

Almost no-loop approach (almost because cellfun essentially uses loop(s) inside it, but it's effect here is minimal as we are using it to find just the number of elements in each cell) -

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));

这篇关于在不同大小的不同像元阵列中查找重复值的最快方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-23 21:08