Wenn Sie jede Zahl durch die Summe dividieren, erhalten Sie möglicherweise nicht die gewünschte Verteilung. Beispielsweise wählt bei zwei Zahlen das Paar x, y = random.random (), random.random () einen Punkt gleichmäßig auf dem Quadrat 0 <= x <1, 0 <= y <1 aus. Teilen durch die Summe "projiziert" diesen Punkt (x, y) auf die Linie x + y = 1 entlang der Linie von (x, y) zum Ursprung. Punkte in der Nähe von (0,5,0,5) sind viel wahrscheinlicher als Punkte in der Nähe von (0,1,0,9).
Für zwei Variablen ergibt x = random.random (), y = 1-x eine gleichmäßige Verteilung entlang des geometrischen Liniensegments.
Mit 3 Variablen wählen Sie einen zufälligen Punkt in einem Würfel aus und projizieren (radial durch den Ursprung), aber Punkte in der Nähe der Mitte des Dreiecks sind wahrscheinlicher als Punkte in der Nähe der Eckpunkte. Die resultierenden Punkte befinden sich auf einem Dreieck in der x + y + z-Ebene. Wenn Sie eine unvoreingenommene Auswahl von Punkten in diesem Dreieck benötigen, ist die Skalierung nicht gut.
Das Problem wird in n-Dimensionen kompliziert, aber Sie können eine Schätzung mit geringer Genauigkeit (aber hoher Genauigkeit für alle Laborwissenschaftler!) Erhalten, indem Sie einheitlich aus der Menge aller n-Tupel nicht negativer Ganzzahlen auswählen, die sich zu summieren N, und dann teilen Sie jeden von ihnen durch N.
Ich habe kürzlich einen Algorithmus entwickelt, um dies für n, N mit bescheidener Größe zu tun. Er sollte für n = 100 und N = 1.000.000 funktionieren, um 6-stellige Zufälle zu erhalten. Siehe meine Antwort unter:
Eingeschränkte Zufallszahlen erstellen?