Поділивши кожне число на загальне, можливо, ви не отримаєте бажаного розподілу. Наприклад, з двома числами пара x, y = random.random (), random.random () обирає точку рівномірно на квадраті 0 <= x <1, 0 <= y <1. Поділивши на суму "проектує" цю точку (x, y) на пряму x + y = 1 вздовж прямої від (x, y) до початку координат. Точки поблизу (0,5,0,5) будуть набагато більш імовірними, ніж точки поблизу (0,1,0,9).
Тоді для двох змінних x = random.random (), y = 1-x дає рівномірний розподіл по геометричному відрізку лінії.
З 3 змінними ви вибираєте випадкову точку в кубі та проектуєте (радіально, через початок координат), але точки поблизу центру трикутника будуть вірогіднішими, ніж точки біля вершин. Отримані точки знаходяться на трикутнику в площині x + y + z. Якщо вам потрібен неупереджений вибір точок у цьому трикутнику, масштабування не годиться.
Проблема ускладнюється в n-вимірах, але ви можете отримати низьку точність (але високу точність для всіх шанувальників лабораторії!), Рівномірно вибравши з набору всіх n-крапок невід'ємних цілих чисел, додаючи до N, а потім розділивши кожен з них на N.
Нещодавно я придумав алгоритм, щоб зробити це для скромних n, N. Він повинен працювати при n = 100 і N = 1 000 000, щоб дати вам 6-значні випадки. Дивіться мою відповідь за адресою:
Створити обмежені випадкові числа?