使用R中的规则创建随机矩阵

时间:2015-05-27 10:32:57

标签: r

我需要从下面的值创建一个随机矩阵,其中包含两个基本规则:

1)每列必须只包含一个值,其余值为零和

2)每行必须只占一个值。

# create dummy matrix
B = matrix( 
  c(83, 101, 75, 182, 150, 199,
    218,  80,   90, 138,    249,    299,
    113,  171,  146,    226,    40.4,   78,
    314,    116,    186,    33.2,   345,    196,
    327,    189,    199,    109,    359,    281,
    430,    292,    302,    232,    461,    404    
  ), ncol=6, nrow=6)
# Transpose
t(B)
# names for cols and rows
colnames(B) <- c("x1",  "x2",   "x3",   "x4",   "x5",   "x6")
rownames(B) <- c("y1",  "y2",  "y3",    "y4",   "y5",   "y6")

该安排的每种可能组合都是输出

    x1  x2  x3  x4  x5  x6
y1  83  0   0   0   0   0
y2  0   0   90  0   0   0
y3  0   171 0   0   0   0
y4  0   0   0   0   345 0
y5  0   0   0   109 0   0
y6  0   0   0   0   0   404

,例如

    x1  x2  x3  x4  x5  x6
y1  0   101 0   0   0   0
y2  218 0   0   0   0   0
y3  0   0   146 0   0   0
y4  0   0   0   0   345 0
y5  0   0   0   109 0   0
y6  0   0   0   0   0   404

依此类推......

拜托,有没有优雅的解决方案,如何做到这一点。任何建议或帮助非常感谢。非常感谢前进。

1 个答案:

答案 0 :(得分:1)

创建对角矩阵,然后置换行或列。在单个随机排列的情况下sample(n)就足够了,allPerms

n <- 3  # dimension
mat <- diag(1:n)

permute::allPerms(n) -> perms
mat[perms[k, ], ]   # k-th permutation

缺点是所有排列都会生成并保存。