Generating random numbers with a different probabilities
29 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
If I want to generate random numbers between 0 and 150, however i want the probability of having numbers between 0 and 50 to be higher, how can i do it?
2 comentarios
John D'Errico
el 1 de Dic. de 2021
I see essentially this same question so often. The problem is, it is not enough to say that you want higher probabilities for some values. That is too vague a question to have an answer, because there are infinitely many distributions that will satisfy your vaguely stated goal. Worse, you have not even stated if you need integer results, or if real numbers are desired.
Respuestas (3)
Yusuf Suer Erdem
el 1 de Dic. de 2021
Hi there. These codes below are completely original and made by me for you. Each time you need to enter a probability value to the system. When the probability is closer to 1, the system gives more digits from 0-50 range. I hope it works for you. Good luck.
clc; clear; close all;
choice = menu('Choose the case','probability=1','probability=0.7','probability=0.5','probability=0.3');
if choice==1
r = randi([0 50],1,125);
k = randi([50 150],1,25);
elseif choice==2
r = randi([0 50],1,100);
k = randi([50 150],1,50);
else
r = randi([0 50],1,75);
k = randi([50 150],1,75);
end
l=[r k];
2 comentarios
Alan Stevens
el 1 de Dic. de 2021
Assuming there are just two levels of probability, and that the numbers are real, not just integers, you could try:
p50 = 0.75; % probability of number less than 50
N = 10^5; % number of random numbers required
u = rand(N,1); % uniform random numbers
r(u<=p50) = u(u<=p50)*50; % random numbers less than 50
r(u>p50) = u(u>p50)*100 + 50; % random numbers between 50 and 150
Steven Lord
el 1 de Dic. de 2021
If you know the probabilities you want each number to have you could use discretize. For instance if I want to generate numbers between 1 and 10 with the odd numbers being twice as likely:
P = repmat([2 1], 1, 5)
cumulativeP = [0 cumsum(P)./sum(P)]
r = rand(1, 1e5); % Random numbers in range (0, 1)
d = discretize(r, cumulativeP); % Bin the random numbers in r using the bins in cumulativeP
h = histogram(d, (1:11)-0.5, 'Normalization', 'probability'); % Show the results
xticks(1:10)
The bars for 1, 3, 5, 7, and 9 are about twice as tall as the bins for 2, 4, 6, 8, and 10 as expected.
shouldBeCloseToP = h.Values./h.Values(end)
0 comentarios
Ver también
Categorías
Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!