乱数について

1 view (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)

Tags

Community Treasure Hunt

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

Start Hunting!