0

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

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

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

或者,我可以a=sum(ismember(array, 'value'),2)用来生成'value'出现在的逻辑向量array,并用于b=find(a)查找出现的行索引'value'。我可以对 10 的每个值执行此操作。但现在问题变成了,在这 10 个索引列表中,哪个索引出现 3 次或更多次?

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

4

1 回答 1

1

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

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

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;
于 2012-06-21T19:52:59.553 回答