0

そのため、ビー玉の袋の任意のモデルをシミュレートしようとしています (これがどのように機能するかが異なる場合は、置き換えて)、結果を表示する際に問題が発生しています。

私がどのようにセットアップしたかというと、コードは、袋に入っているビー玉の数、選択したいビー玉の数、そして異なる色がいくつあるかを尋ねます。(それぞれ N、S、および k として定義されます)。次に、セル配列で 1 と k の間のループを実行して、ビー玉の色に名前を付けます。次に、バッグに各色がいくつあるかを尋ねることで確率をシミュレートする 2 つ目の配列を作成します。次に、10 の「ゲーム」をシミュレートするランダム マトリックスを生成します (つまり、rDist=randi(N,[10,S]); ビー玉を選択したので、別の 10xS セル配列を作成し、選択した数に基づいてビー玉の色でそのセル配列を塗りつぶします。つまり、10 個のビー玉があり、7 個が赤で 3 個が緑であるとします。PRNG が 1:7 を選択した場合、結果のセル配列に「赤」と表示され、8:10 が選択された場合、対応する位置に「緑」が表示されます。私はこれを有限数で行うことができますが、大理石の色の任意の数の分布でこれを K の大理石の色に拡張したいと考えています。何かお手伝いできますか?

2 つの大理石タイプに対する私の「有限」ソリューションは以下のとおりです。

for lc=1:10*S
    counter=0;
    if (rDist(lc)>=1 && (rDist(lc)<=Probabilities(1)))
        Results{lc}=Color{1};
    end
    counter=Probabilities(1);
    if (rDist(lc)>counter && (rDist(lc)<=counter+Probabilities(2)))
        Results{lc}=Color{2};
    end
end
4

1 に答える 1

1

で各色に対応する間隔を計算できますcumsumrDist次に、 の各エントリが属する間隔を見つける必要があります。

numPicks = 5;
numGames = 10;

names = {'red', 'white', 'blue'};
counts = [2 6 9];
N = sum(counts);

cumsumCounts = cumsum(counts);
rDist=randi(N, [numGames, numPicks]);

out = cell(size(rDist));
for i = length(counts):-1:1
  out(rDist <= cumsumCounts(i)) = names(i);
end

quantizこれは、通信システム ツールボックスまたはrandSample統計と機械学習ツールボックスから行うこともできます。最後に、より紛らわしいワンライナーを使用できますout = names(arrayfun( @(x)( find(cumsumCounts >= x, 1) ), rDist));

于 2015-08-14T10:51:14.393 に答える