ho bisogno di scegliere a caso un vettore n-dimensionale di lunghezza 1. La mia idea migliore è quella di scegliere un punto casuale nella sfera di normalizzarlo:Computazionalmente selezionando un punto a caso su un Ipersfera
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]
L'unico problema è che lo volume of an n-ball diventa più piccolo man mano che la dimensione aumenta, quindi l'uso di una distribuzione uniforme da random.random
richiede molto tempo anche per piccoli n come 17. Esiste un modo migliore (più veloce) per ottenere un punto casuale su una n-sfera?
È possibile trovare l'algoritmo [qui] (http://stackoverflow.com/a/34402858/4081336). –
@LeandroCaniglia Bene, quell'algoritmo riguarda solo n = 3 –
A caso, vuoi dire che deve essere distribuito uniformemente? Queste cose si complicano abbastanza facilmente, quindi non scommetterei che ciò che stai facendo ora funzioni in questo senso. – Bakuriu