在数组中搜索值的组合

时间:2012-06-21 19:34:46

标签: matlab match combinations

这应该是一个相当简单的问题,但我有兴趣听到一些独特的方法,所以这里。我正在使用Matlab,但是一个可行的C#解决方案对我也有用。

我有一个数组(23000行x 3列)。每行是来自一组90个值的3个值的组合。我想选择这90个值的一个子集,比如说10,并找到这10个值中任意3个为成员的行,并返回行号。

现在,我可以生成这10个值的所有3值组合的列表,然后在Matlab中使用ismember来查找每个组合的行。但是有不同或更优雅的方式吗?

或者,我可以使用a=sum(ismember(array, 'value'),2)生成'value'中出现array的逻辑向量,并使用b=find(a)查找'value'所在的行索引发生。我可以为10的每个值做这个。但现在问题变成,在这10个指数列表中,哪个指数出现3次或更多次?

任何想法/意见/问题都表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:1)

你对逻辑索引的建议几乎是正确的。

使值成为具有所有可能值的向量:

value = [1 2 3 4 5 6 7 8 9 10];

现在,您可以一次对所有值使用ismember。

logical_array = ismember(array, value);
num_matches = sum(logical_array,2);
rows_with_3_matches = find(num_matches==3);
logical_vector = num_matches==3;