乱数について

4 Ansichten (letzte 30 Tage)
sz
sz am 20 Okt. 2021
Beantwortet: Akira Agata am 20 Okt. 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

Akzeptierte Antwort

Akira Agata
Akira Agata am 20 Okt. 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;

Weitere Antworten (0)

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!