各列に数字1の10%と数字3の90%が必要な場合、Matlabで数字1と3のランダムな分布を持つ行列(100 x 100)を作成するにはどうすればよいですか? これはランダムな分布でなければなりません。
誰でも私を助けることができますか?
ありがとうございます!
各列に数字1の10%と数字3の90%が必要な場合、Matlabで数字1と3のランダムな分布を持つ行列(100 x 100)を作成するにはどうすればよいですか? これはランダムな分布でなければなりません。
誰でも私を助けることができますか?
ありがとうございます!
@ChrisA と @JosephLust からの回答は、各列に正確に10 個の 1 と 90 個の 3 がランダムな順序で含まれている配列を提供します。それが必要かもしれませんが、ランダムな分布でなければならないと述べているので、おそらく代わりに必要なのは、各列に 1 になる確率が 10%、3 になる確率が 90% のエントリを含めることです (これは同じではありません)。
後者が必要な場合は、これを試してください:
vals = [1,3,3,3,3,3,3,3,3,3];
idx = randi(10,100,100);
data = vals(idx);
中央の行は、各エントリが 1 から 10 までのランダムな整数である 100x100 行列を作成します。次に、これを使用して値の配列にインデックスを付けます。値の 1 つは 1、9 は 3 です。
v = [1*ones(10,1) ; 3*ones(90,1)];
A = zeros(100,100);
for i = 1:100,
A(:,i) = v(randperm(100));
end
またはfor
ループなし
A = zeros(100,100);
v = [1*ones(10*100,1) ; 3*ones(90*100,1)];
A(:) = v(randperm(100*100));
ただし、後で列を別の方法で明示的に制御する場合は、最初の方が適している可能性があります。
編集:実際には、微妙な点が1つあります。コードの最初の部分は、各列に正確に 10 個の 1 と正確に 90 個の 3 があることを保証します。コードの 2 番目の部分では、この保証は行われません。マトリックス全体に 1000 個の 1 と 9000 個の 3 があるだけです。
私が Matlab TA になってから数年が経ちましたが、次の方法でもできるはずです。
v = [1*ones(10*100,1) ; 3*ones(90*100,1)];
v = reshape( v(randperm(length(v))) ,100,100)