【问题标题】:Strange behaviour of MATLAB combnk functionMATLAB combnk 函数的奇怪行为
【发布时间】:2013-02-25 04:31:47
【问题描述】:

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

【问题讨论】:

  • 这对我来说似乎是一个错误。您至少应该向 MathWorks 报告,看看他们是否同意。

标签: matlab combinations


【解决方案1】:

您可以尝试nchoosek 而不是combnk。我没有matlab统计工具箱(只有八度),所以不知道nchoosek有没有明显的缺点。

【讨论】:

  • 不错。这种方法提供了一致的结果。
【解决方案2】:

这将解决订购问题:

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

我不知道为什么 MATLAB 会显示这种行为。

【讨论】:

  • 非常感谢您的回答。您的解决方案是一个很好的解决方法。
猜你喜欢
  • 1970-01-01
  • 2015-11-19
  • 2016-01-26
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 2019-06-03
相关资源
最近更新 更多