1

ランダムなバイナリ正方行列を作成しようとしています。ただし、いくつかの制約があります。対角線を= 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.

上三角形と下三角形が混同されているかどうかを確認するためにいくつかのバリエーションを試しましたが、うまくいかないようです。

この質問が理解できることを願っています。

4

1 に答える 1

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
于 2014-04-09T03:54:42.183 に答える