То, что вы просите, это не случайно;действительно, это довольно структурировано.Смысл случайных данных в том, что они не структурированы: вы не можете ничего сказать о том, какими будут значения, только то, что они будут в среднем .
Вы все еще можете сделатьто, что вы хотите: просто укажите диапазоны, в которые должны попадать ваши числа.
>>> def random_function(*args):
... n = sum(args)
... bottom = 0
... for m in args:
... for _ in range(m):
... yield random.uniform(bottom, bottom + m/n)
... bottom += m/n
...
>>> list(random_function(6,3,1))
[0.1849778317803791, 0.2779140519434712, 0.08380168147928498, 0.5477412922676888
, 0.5158697440011519, 0.5535466918038039, 0.8046993690361345, 0.714614514522802,
0.7102988180048052, 0.9608096335125095]
>>> list(random_function(6,3,1))
[0.29313403848522546, 0.5543469551407342, 0.14208842652528347, 0.344464024804118
7, 0.3168266508239002, 0.5956620829410604, 0.673021479097414, 0.7141779120687652
, 0.7783099010964684, 0.9103924993423906]
Объяснение:
Учитывая (6,3,1)
, определите их сумму (10
).Нам нужны шесть чисел от 0 до 6/10, три числа от 6/10 до 6/10 + 3/10 и одно число от 6/10 + 3/10 до 6/10 + 3/10 + 1/10.Мы можем сгенерировать их, позвонив
random.uniform(0, 6/10) six times,
random.uniform(6/10, 9/10) three times, and
random.uniform(9/10, 1) once.