Clear Filters
Clear Filters

How to generate normal distribution from an array?

26 views (last 30 days)
A = [2.29441228002842 17.3351873969651 2.79928860040389 7.17554281085515;
3.16200415659481 16.9975006219209 3.18395042061777 7.45747601536461;
4.55387378846938 13.4948344868957 3.22594708715312 7.49001605579868]
B = normrnd(mean(A(:,1),1),std(A(:,1),1),[50,1])
we can get array result for column 1 of A. So, dimension of matrix B is [50,1] of normal distribution.
Actually, I want to expect B dimension is [50,4] using condition of mean and std just like above.
I want to do it without creating another function of normal distribution.Because, It will create another file.m
ex:
B = normrnd(mean(A,1),std(A,1),[50,4])
  • The function "normrnd" is not working, error
Thanks

Answers (2)

Naman Kaushik
Naman Kaushik on 6 Jul 2023
Hi William,
I understand that you wish to find the Normal distribution for an array.
One way to do this would be to use the "fitdist()" function. You can pass your array as the input and speicfy that you wish for the normal distribution.
dist = fitdist(data, 'Normal');
Here, you data would be a column vector which you can make by simply taking the transpose of your array.
The output that you get would be a struct with the information that would be relevant to you.
To read more about the "fitdist()" function, you can refer the following link:
  1 Comment
William
William on 6 Jul 2023
Yeah.. But, I want a constrained normal distribution with using spesific mean and std.

Sign in to comment.


Nathan Hardenberg
Nathan Hardenberg on 6 Jul 2023
You could do it in a small for loop:
A = [2.29441228002842 17.3351873969651 2.79928860040389 7.17554281085515;
3.16200415659481 16.9975006219209 3.18395042061777 7.45747601536461;
4.55387378846938 13.4948344868957 3.22594708715312 7.49001605579868];
B = zeros(50,4); % initialize B
for i = 1:4
B(:,i) = normrnd(mean(A(:,i)), std(A(:,i)), [50,1]); % write to each colum
end
display(B)
B = 50×4
2.9994 17.1683 3.0698 7.1923 3.4782 14.2413 3.4590 7.1612 4.8152 18.2626 3.0337 7.4850 3.1296 17.4887 2.9768 7.3988 3.3263 16.3220 3.1835 7.4234 3.5581 12.1935 2.5272 7.4972 2.6692 12.8850 3.3725 7.1382 4.7436 17.3658 3.1075 7.6050 4.2367 16.2350 3.5494 7.2822 5.4219 17.1790 2.9396 7.3607
Taking @Naman Kaushiks answer into accout, you could also use the fitdist()-function to get the mean and std-deviation.
for i = 1:4
pd = fitdist(A(:,i), 'Normal');
B(:,i) = normrnd(pd.mu, pd.sigma, [50,1]); % write to each colum
end
display(B)
B = 50×4
4.2886 15.4471 3.2503 7.2869 3.8850 12.7500 2.9612 7.2627 2.3870 16.7963 3.1437 7.2130 2.6593 15.2580 3.4847 7.3102 3.4409 14.1389 3.3418 7.6398 3.4434 15.9600 3.1699 7.3803 -1.0641 14.8131 3.0205 7.3550 1.0493 15.6728 3.0498 7.0878 4.4023 16.5267 3.3049 7.5497 3.4593 17.5877 2.6437 7.4040

Community Treasure Hunt

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

Start Hunting!