2017-07-19 5 views
0

通常の分布で0〜1920ピクセルの範囲から1つのピクセルを選択する必要がありますが、MatLabでこれを行う方法はわかりません。 normrnd()を使用してmusigmaのランダム値を取得することができますが、これを自分の状況にどのように適用すればよいですか?正規分布の数値の範囲から選択する

muは、たとえば500ピクセル、sigmaの100ピクセルである可能性があります。

私の現在のアプローチは、だから私はちょうどnormrndを使用して、値が私の限界より高いか低い場合は遮断しています。この

function xpos = apply_normal_distribution(mu, sigma, min_xpos=1, max_xpos=1920) 
    % Applies normal distribution with median mu and standard deviation sigma 
    % xpos will always be: min <= xpos <= max 
    xpos = ceil(normrnd(mu, sigma)); 
    if xpos > max_xpos 
     xpos = max_xpos; 
    elseif xpos < min_xpos 
     xpos = min_xpos; 
    endif 
end 

です。これがどれほど良いか分かりませんが、うまくいきます。

+0

コードはどこですか?何を試しましたか? –

+0

私は始める方法がわからないので、何もありません。 'normrnd()'関数だけを試しましたが、ここでそれをどのように適用するかは分かりませんでした。私の知識統計は残念ながら最高ではありません。 – herhuf

+1

あなたはおそらくここで多くの助けを得ないでしょう。通常、質問には質問の一部としてユーザーのコード(努力)を含む特定の項目が含まれます。 –

答えて

1

正規分布を拘束した(またはその結果を他の方法でフィルタリングした)瞬間、それはもはや正規分布ではありません。しかし、あなたが探しているものに最も近いのはtruncated normal distributionです。 の場合、境界が平均から大きく離れていて、分散が小さい場合、それはそれ自体のプロパティのセットです。あなたの自己の提案は実現がバウンド外にある場合、あなたがバウンドに値を設定するという問題がある

オクターブのためにゼロから構築
mu = 500; 
sigma = 100; 
%truncate at 0 and 1920 
pd = truncate(makedist('Normal',mu,sigma),0,1920); 
% take some (10) samples 
samples = random(pd,10,1); 

:Matlabのを使用すると、とのことを行うことができます値。したがって、バインドされた値は過度に比例して選択されます。それほど汚い方法ではなく、単に新しい価値を引き出すことです。私が働いてオクターブを持っていないが、このようなものは、それを行う必要があります。ただ、警告として

function xpos = apply_normal_distribution(mu, sigma, min_xpos=1, max_xpos=1920) 
    % new realisations are drawn as long as they are outside the bounds. 
    while xpos<min_xpos | xpos>max_xpos 
      xpos = ceil(normrnd(mu, sigma)); 
    end 
end 

:それは実現が範囲内になることはほとんどありません場合、これは非常に長い時間のために実行可能...

+0

残念なことに私は実際にOctaveと作業していますが、ここではmakedistは実装されていないようです。 – herhuf

+0

@herhuf '/ matlab'タグの代わりに、あなたの質問に' octave'を使うべきです。 – rahnema1

+0

私がやったこともあります。まだ - ありがとう!これは私のためです。 – herhuf