2

各列に数字1の10%と数字3の90%が必要な場合、Matlabで数字1と3のランダムな分布を持つ行列(100 x 100)を作成するにはどうすればよいですか? これはランダムな分布でなければなりません。

誰でも私を助けることができますか?

ありがとうございます!

4

3 に答える 3

1

@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 です。

于 2012-05-22T08:40:59.227 に答える
1
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 があるだけです。

于 2012-05-21T21:08:54.350 に答える
1

私が Matlab TA になってから数年が経ちましたが、次の方法でもできるはずです。

v = [1*ones(10*100,1) ; 3*ones(90*100,1)];
v = reshape( v(randperm(length(v))) ,100,100)
于 2012-05-21T21:23:53.840 に答える