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