ich brauche, um zufällig einen n-dimensionalen Vektor mit der Länge 1. Meine beste Idee ist, wählen Sie einen beliebigen Punkt in der Kugel zu holen ein normalisieren es:Rechnerisch einen beliebigen Punkt auf einem n-Bereich Kommissionierung
import random
def point(n):
sq = 0
v = []
while len(v) < n:
x = 1 - 2*random.random()
v.append(x)
sq = sq + x*x
if sq > 1:
sq = 0
v = []
l = sq**(0.5)
return [x/l for x in v]
Das einzige Problem ist, dass die kleiner wird, wenn die Dimension steigt, so dass die Verwendung einer gleichmäßigen Verteilung von random.random
sehr lange dauert, sogar für kleine n wie 17. Gibt es eine bessere (schnellere) Möglichkeit, einen zufälligen Punkt auf einer n-Kugel zu erhalten?
Sie finden den Algorithmus [hier] (http://stackoverflow.com/a/34402858/4081336). –
@LeandroCaniglia Nun, dieser Algorithmus befasst sich nur mit n = 3 –
Per Zufall meinen Sie, dass es gleichmäßig verteilt werden muss? Diese Dinge werden ziemlich leicht schwierig, also würde ich nicht wetten, dass das, was Sie tun, jetzt in diesem Sinne funktioniert. – Bakuriu