我需要隨機選取長度爲1的n維向量我的最好的辦法是選擇一個隨機點在球體的正常化是:計算上採摘一個正球體隨機點
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]
唯一的問題是volume of an n-ball隨着尺寸的增加而變小,所以使用從random.random
得到的均勻分佈需要非常長的時間,甚至對於像17這樣的小n也是如此。是否有更好(更快)的方法來獲得n球上的隨機點?
你可以找到算法[這裏](http://stackoverflow.com/a/34402858/4081336)。 –
@LeandroCaniglia那麼,該算法只處理n = 3 –
通過隨機你是否意味着它必須是均勻分佈的?這些事情變得很棘手,所以我不敢打賭,你現在正在做的事情在這個意義上起作用。 – Bakuriu