【Python】行/列方向に重複のないランダム順序のn×n行列生成

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↓

4123
1234
2341
3412
# 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行列生成

コメントを残す

メールアドレスが公開されることはありません。

トップへ戻る