0

これは答えるのがかなり簡単な質問ですが、それを行うためのいくつかのユニークな方法を聞くことに興味があるので、ここに行きます. 私は Matlab を使用していますが、実行可能な C# ソリューションも同様に機能します。

私は配列(23000行×3列)を持っています。各行は、90 個の値のセットからの 3 つの値の組み合わせです。これらの 90 個の値のサブセット、たとえば 10 個を選択し、これらの 10 個の値のうち任意の 3 個がメンバーである行を見つけて、行番号を返したいと思います。

これで、これら 10 個の値の 3 つの値の組み合わせすべてのリストを生成しismember、Matlab で使用して各組み合わせの行を見つけることができます。しかし、別の、またはよりエレガントな方法はありますか?

または、 を使用して で発生a=sum(ismember(array, 'value'),2)する論理ベクトルを生成し、を使用して発生する行インデックスを見つけることもできます。10 個の値ごとにこれを行うこともできます。しかし、問題は、これら 10 個のインデックスのリストのうち、どのインデックスが 3 回以上発生するかということになります。'value'arrayb=find(a)'value'

どんな考え/コメント/質問でも大歓迎です。ありがとう!

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 に答える