【问题标题】:how to create numeral combinations如何创建数字组合
【发布时间】:2016-09-20 16:22:04
【问题描述】:

我有 6 个数字(1、2、3、4、5、6),我需要创建所有可能的组合(即 6*5*4*3*2*1 = 720 个组合),其中没有数字可以使用两次,不允许使用O。我想获得如下组合:123456、246135、314256 等。 有没有办法用 Matlab 或 R 创建它们?谢谢。

【问题讨论】:

  • 复制 R:Generating all distinct permutations of a list in Rcombinat::permn(1:6)
  • 我们是否应该将其作为骗子关闭,因为它同时请求 R 和 MATLAB?
  • e1071 中的排列也适用于数字:library(e1071)permutations(6)
  • 如果我们也能找到一个 matlab 骗子,我会很高兴作为一个骗子结束。一目了然,我发现了许多更具体的 matlab 置换问题,但没有什么适合。
  • @Gregor 我也没有为 Matlab 找到一个好的。无论如何,在 Matlab 中(也许在 R 中也是如此,但我不知道)这是一个非常基本的问题

标签: r matlab combinations sequence


【解决方案1】:

在 Matlab 中你可以使用

y = perms(1:6);

这给出了一个数字 720×6 数组y,其中每一行都是一个排列:

y =
     6     5     4     3     2     1
     6     5     4     3     1     2
     6     5     4     2     3     1
     6     5     4     2     1     3
     6     5     4     1     2     3
     ···

如果您希望结果为 char 数组:

y = char(perms(1:6)+'0');

产生

y =
654321
654312
654231
654213
654123
···

【讨论】:

    【解决方案2】:

    在 R 中:

    library(combinat)
    p <- permn(1:6)
    

    给你一个清单; do.call(rbind, p)matrix(unlist(p), ncol=6, byrow=TRUE) 将给出一个数字数组; sapply(p,paste,collapse="") 给出一个字符串向量。

    【讨论】:

      【解决方案3】:

      这是一个基本的R'解决方案':

      p <- unique(t(replicate(100000, sample(6,6), simplify="vector")))
      nrow(p)
      #> [1] 720
      head(p)
      #>      [,1] [,2] [,3] [,4] [,5] [,6]
      #> [1,]    3    5    4    2    1    6
      #> [2,]    6    3    5    4    1    2
      #> [3,]    5    1    6    2    3    4
      #> [4,]    6    5    3    2    4    1
      #> [5,]    5    2    3    6    4    1
      #> [6,]    1    4    2    5    6    3
      

      当然这是一个 hack,这可能仅适用于给出的示例,但有时以愚蠢的方式做事很有用...这需要向量 1:6 的过多样本(无需替换),然后删除任何重复项。它确实产生了独特的 720 结果,但它们没有排序。

      【讨论】:

        【解决方案4】:

        baseR 方法是

        x <- do.call(expand.grid, rep(list(1:6), 6))
        x <- x[apply(x, MAR = 1, function(x) length(unique(x)) == 6), ]
        

        创建一个包含 6^6 行的矩阵,然后只保留包含所有 6 个数字的行。

        【讨论】:

          猜你喜欢
          • 2017-01-25
          • 2021-03-27
          • 1970-01-01
          • 2021-12-13
          • 1970-01-01
          • 1970-01-01
          • 2022-11-17
          • 1970-01-01
          • 2022-01-20
          相关资源
          最近更新 更多