我正在尝试创建随机二进制方阵。但是,存在一些限制。我想对角线= 0.此外,上下三角形需要相互反转换。
要清楚,我正在寻找的是下面的随机示例5 x 5矩阵。如果你查看任何行/列对,例如在图3和5,1和4中,这些对的上三角和下三角具有相反的结果。
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 1 0
[2,] 1 0 0 0 0
[3,] 1 1 0 1 0
[4,] 0 1 0 0 1
[5,] 1 1 1 0 0
我在使随机矩阵不对称时遇到了一些问题。
这是我到目前为止创建随机二进制12x12矩阵的原因:
function1 <- function(m, n) {
matrix(sample(0:1, m * n, replace = TRUE), m, n)
}
A<-function1(12,12)
A #check the matrix
diag(A)<-0
我尝试将转置的上三角形放入下三角形:
A[lower.tri(A)] <- t(A[upper.tri(A)])
A #rechecking the matrix - doesn't seem to do it.
我尝试了一些变化,看看我的上/下三角是否混淆了,但似乎都没有。
希望这个问题可以理解。
答案 0 :(得分:1)
fun <- function(n){
vals <- sample(0:1, n*(n-1)/2, rep = T)
mat <- matrix(0, n, n)
mat[upper.tri(mat)] <- vals
mat[lower.tri(mat)] <- 1 - t(mat)[lower.tri(mat)]
mat
}
并测试出来......
> fun(5)
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 1 0 1
[2,] 1 0 1 0 1
[3,] 0 0 0 0 0
[4,] 1 1 1 0 1
[5,] 0 0 1 0 0
> out <- fun(5)
> out + t(out)
[,1] [,2] [,3] [,4] [,5]
[1,] 0 1 1 1 1
[2,] 1 0 1 1 1
[3,] 1 1 0 1 1
[4,] 1 1 1 0 1
[5,] 1 1 1 1 0