Generate samples from a normal distribution

26 ビュー (過去 30 日間)
Kash022
Kash022 2016 年 11 月 25 日
回答済み: Image Analyst 2016 年 11 月 25 日
Hello,
I have a Gaussian mixture distribution which looks as attached. I now want to sample and generate 1000 samples from this and plot their histogram. I tried using randi function but it does not work. Please let me know how to do this.
y = randi(my_pdf,100); %%my_pdf is my distribution
Thanks!
  5 件のコメント
Kash022
Kash022 2016 年 11 月 25 日
編集済み: Kash022 2016 年 11 月 25 日
Its a gaussian mixture distribution with different means. This is the code snippet used to generate it.
clear all;
XX= [-2:0.01:20];
some_rand_noise = 0.1;
my_pdf = zeros(1,length(XX));
for k = 1:256
for ii=1:256
val(ii) = hw(bitxor(ii-1,k-1))+hw(k-1); %%hw is a function used to generate hamming weights i.e no of ones %%%
my_pdf = my_pdf + normpdf(XX,val(ii),some_rand_noise);
end
end
figure();plot(XX,my_pdf/256); hold on;
Image Analyst
Image Analyst 2016 年 11 月 25 日
Please supply the hw function so we can run your code.

サインインしてコメントする。

回答 (3 件)

Image Analyst
Image Analyst 2016 年 11 月 25 日
If you have that function already, then use inverse transform sampling: https://en.wikipedia.org/wiki/Inverse_transform_sampling. In short, compute the CDF of your function and use rand() to pick a value.
I attach an example of how I used it for the Rayleigh distribution.

CarrotCakeIsYum
CarrotCakeIsYum 2016 年 11 月 25 日
randi will generate rando integers.
To generate a random sample from a vector, use randsample. see:
help randsample
I'd imagine you'd want:
y = randsample(my_pdf,100);
To plot a histogram use the 'hist' command.
  2 件のコメント
Kash022
Kash022 2016 年 11 月 25 日
thanks! but how do I do this for different means? as you can see in my attachment, I have different means,for each of them I need to generate the samples and then plot their histogram. Thanks!
CarrotCakeIsYum
CarrotCakeIsYum 2016 年 11 月 25 日
Sorry I don't follow... your population will only have one mean!
For the JPEG you've posted, the mean will be at 7.5 (since it is a symmetrical distribution).

サインインしてコメントする。


Image Analyst
Image Analyst 2016 年 11 月 25 日
Maybe use randn() to get a list of a few million numbers taken from those 13 distributions (call randn thirteen times), then pick one of the values at random.

Community Treasure Hunt

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

Start Hunting!

Translated by