MATLAB combnk函数的奇怪行为

时间:2013-02-25 04:31:47

标签: matlab combinations

我试图在给定的数字范围内生成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)向后产生结果。这仍然是一个大问题。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用nchoosek代替combnk。我没有matlab统计工具箱(只有八度),所以我不知道nchoosek是否有任何重大的不利因素。

答案 1 :(得分:1)

这将解决订购问题:

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

我不知道为什么MATLAB会出现这种行为。