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 |
# 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/27 coded by Haruhiko Iwaoki
import numpy as np
def randOrderedMatrix(n):
A = np.zeros((n, n,))
A[:,0] = np.arange(1, n+1)
for i in range(1, n):
A[:,i] = A[:,0] + i
A[A>n] = A[A>n]-n
r = np.random.choice(n, n, replace = False)
A = A[:,r]
r = np.random.choice(n, n, replace = False)
A = A[r,:]
return A
if __name__ == '__main__':
main()
【Python】行/列方向に重複のないランダム順序のn×n行列生成