乱数について

조회 수: 5 (최근 30일)
sz
sz 2021년 10월 20일
답변: Akira Agata 2021년 10월 20일
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

채택된 답변

Akira Agata
Akira Agata 2021년 10월 20일
以下のような方法はどうでしょうか?
>・乱数を使用して作る
>・乱数を使用して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;

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!