【MATLAB】行/列方向に重複のないランダム順序の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


function Y = randOrderedMatrix(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/25 coded by Haruhiko Iwaoki

X = zeros(n);
x = 1:n;
for i=1:n
    X(i,x) = circshift(x, [1 -i]);
end

X = X(:,X(1,:)~=0);

r = randperm(n);
for i=1:n
    Y(i,:) = X(r(i),:);
end

X = Y;
c = randperm(n);
for i=1:n
    Y(:,i) = X(:,c(i));
end
end

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

コメントを残す

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

トップへ戻る