muszę losowo pick n-wymiarowy wektor o długości 1. Moim najlepszym pomysłem jest, aby wybrać losowy punkt w tej kuli znormalizować go:obliczeniowo zbieranie losowy punkt na hipersfera
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]
Jedynym problemem jest to, że volume of an n-ball staje się mniejszy wraz ze wzrostem wymiaru, więc użycie jednolitego rozkładu od random.random
zajmuje bardzo długo nawet małe n 17. Czy istnieje lepszy (szybszy) sposób na uzyskanie losowego punktu na n-kuli?
Możesz znaleźć algorytm [tutaj] (http://stackoverflow.com/a/34402858/4081336). –
@ LeandroCaniglia No cóż, ten algorytm zajmuje się tylko n = 3 –
Przez przypadek masz na myśli to, że musi być równomiernie rozprowadzany? Te rzeczy łatwo stają się trudne, więc nie sądzę, że to, co teraz robisz, działa w tym sensie. – Bakuriu