Matlab 在数组中搜索值的组合

Matlab 在数组中搜索值的组合,matlab,match,combinations,Matlab,Match,Combinations,这应该是一个相当简单的问题来回答,但我有兴趣听到一些独特的方法来做到这一点,所以这里来。我正在使用Matlab,但一个可行的C解决方案也适用于我 我有一个23000行x 3列的数组。每行是一组90个值中的3个值的组合。我想从这90个值中选择一个子集,比如10,然后找到这10个值中任意3个是成员的行,并返回行号 现在,我可以生成这10个值的所有3值组合的列表,然后使用Matlab中的ismember找到每个组合的行。但是有没有一种不同或更优雅的方式呢 或者,我可以使用a=sumismemberar

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

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

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

或者,我可以使用a=sumismemberarray'value',2生成数组中出现'value'的逻辑向量,并使用b=finda查找出现'value'的行索引。我可以为每一个10的值做这个。但现在的问题是,在这10个索引列表中,哪个索引出现3次或更多次


如有任何想法/意见/问题,我们将不胜感激。谢谢

你关于逻辑索引的建议几乎是对的

将值设置为包含所有可能值的向量:

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;

如果c简单地遍历整个数组,根据10个可接受值的数组检查每一列。那么,您想要所有3列的值都包含在10个可能值中的行吗?是的,tPearce,这是正确的。bkr,我对C比较陌生,但它比Matlab快得多,这是一个很好的解决方案,特别是因为我最终用这段代码编写了一个应用程序,但你可能需要为我多解释一点。伙计,这和我所期望的一样简单。感谢您抽出时间回答。您是否愿意就如何在C中实现这一点提供一些见解?