Effacer les filtres
Effacer les filtres

乱数について

7 vues (au cours des 30 derniers jours)
sz
sz le 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

Réponse acceptée

Akira Agata
Akira Agata le 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;

Plus de réponses (0)

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!