1

与えられた数の範囲で2つの要素のすべての組み合わせを生成しようとしています。私は次のように「combnk」関数を使用しています。

combnk(1:4,2)

ans =

 3     4
 2     4
 2     3
 1     4
 1     3
 1     2

combnk(1:6,2)

ans =

 1     2
 1     3
 1     4
 1     5
 1     6
 2     3
 2     4
 2     5
 2     6
 3     4
 3     5
 3     6
 4     5
 4     6
 5     6

返される組み合わせの順序が変わっているようです。プログラムが正しく機能するためには、事前に順序を知っておく必要があります。

一貫した順序で組み合わせを取得するための解決策はありますか?また、MATLABがこの奇妙な動作を示すのはなぜですか?

これまでに考えられる唯一の解決策は、最初に結果行列の最初のエントリを確認し、「flipud」関数を使用してそれを上下逆にすることです。

更新:少し実験してみると、数字のセットの長さが6未満の場合にのみ逆の順序が発生することに気付きました。これが、combnk(1:6,2)が「正しい」順序を生成する理由です。一方、combnk(1:5,2)は、結果を逆方向に生成します。これはまだ大きな問題です。

4

2 に答える 2

2

nchoosekの代わりに試すことができcombnkます。nchoosek私はmatlab統計ツールボックス(オクターブのみ)を持っていないので、重大な欠点があるかどうかはわかりません。

于 2013-02-25T05:00:12.777 に答える
1

これにより、順序の問題が解決されます。

a=combnk(1:4,2);
[~,idx]=sortrows(a);
aNew=a(idx,:);

MATLABがこの動作を示している理由がわかりません。

于 2013-02-25T04:53:01.997 に答える