如何创建数字组合

时间:2016-09-20 16:22:04

标签: r matlab combinations sequence

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

4 个答案:

答案 0 :(得分:4)

在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
···

答案 1 :(得分:3)

在R:

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

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

答案 2 :(得分:0)

以下是基础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

这当然是一个黑客攻击,这可能只适用于给出的例子,但有时候用愚蠢的方式做事情很有用......这会占用矢量{{1}的过多样本(无需替换)然后删除任何重复项。它确实产生了独特的1:6结果,但它们没有排序。

答案 3 :(得分:0)

base R方法

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个数字的行。