乱数について

2 views (last 30 days)
sz
sz on 20 Oct 2021
Answered: Akira Agata on 20 Oct 2021
3×3の行列を100こ作りたいと思っています。
・乱数を使用して作る
・乱数を使用して0.5以上は1、0.5未満は0といったようにしたい。
・A(1,1)A(2,2)A(3,3)成分は全て1とする(対角線の所)
・対角部分(A(1,2)とA(2,1)成分やA(2,3)とA(3,2)成分)は同じ数字になるようにする。
上記のようなデータを作りたいのですが最後の部分が出来ません。
分かりましたらスクリプトを送っていただきたいです。
対角部分が同じ数字にはなっていませんが、下のようなスクリプトは作れました。
X=ones(3,3,100);
for k1=1:length(X(1,1,:))
for l1=1:length(X(:,1,1))
for m1=1:length(X(1,:,1))
if l1~=m1
X(l1,m1,k1)=rand;
end
end
end
end
Y=zeros(3,3,100);
for k=1:length(X(1,1,:))
for l=1:length(X(:,1,1))
for m=1:length(X(1,:,1))
if X(l,m,k)<0.5
Y(l,m,k)=0;
else
Y(l,m,k)=1;
end
end
end
end

Accepted Answer

Akira Agata
Akira Agata on 20 Oct 2021
以下のような方法はどうでしょうか?
>・乱数を使用して作る
>・乱数を使用して0.5以上は1、0.5未満は0といったようにしたい。
この部分は、結局のところ行列の各要素が 1/2 の確率で 0 か 1 となるため、randi 関数を使用しました。
また、若干処理の順番を入れ替えて、「対角成分はすべて1とする」という処理を最後に持ってきました。
% 乱数を使用して作る
% 乱数を使用して0.5以上は1、0.5未満は0といったようにしたい。
X = randi([0 1], 3, 3, 100);
% 対角部分(A(1,2)とA(2,1)成分やA(2,3)とA(3,2)成分)は同じ数字になるようにする
idx = tril(ones(3), -1) == 1;
idx = repmat(idx, 1, 1, 100);
X(idx) = 0;
X = X + permute(X,[2 1 3]);
% A(1,1)A(2,2)A(3,3)成分は全て1とする(対角線の所)
idx = eye(3) == 1;
idx = repmat(idx, 1, 1, 100);
X(idx) = 1;

More Answers (0)

Categories

Find more on Operating on Diagonal Matrices in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!