n×nの行列に1~nまでの数字をランダムにn個ずつ割り振り、行または列方向には各数字が1回しか登場しない行列を作成するプログラムです。
This function returns a n-by-n matrix contains random ordered 1,…,n. Each number appears only once at each row/column position.
Like This↓
4 | 1 | 2 | 3 |
1 | 2 | 3 | 4 |
2 | 3 | 4 | 1 |
3 | 4 | 1 | 2 |
randOrderedMatrix <- function(n) {
# This function returns a n-by-n matrix contains random ordered 1...n.
# Each number appears only once at each row/column position.
# Usage:
# Y = randOrderedMatrix(n)
#
# e.g.
# A = randOrderedMatrix(4)
# A =
# 4 1 2 3
# 1 2 3 4
# 2 3 4 1
# 3 4 1 2
#
# 2020/02/26 coded by Haruhiko Iwaoki
#make a ordered matrix
A <- matrix(0, nrow = n, ncol = n)
A[,1] <- 1:n
for(i in 1:n-1) {
A_i <- A[,1] + i
A_i[A_i > n] <- A_i[A_i > n] - n
A[,i+1] <- A_i
}
#random permutation in row dimension
r <- sample(A[,1])
A <- A[r,]
#random permutation in column dimension
r <- sample(A[,1])
A <- A[,r]
return(A)
}
【R】行/列方向に重複のないランダム順序のn×n行列生成