我需要随机选择一个长度为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]
唯一的问题在于,随着维度的增加,n-球的体积会变得越来越小,因此即使是对于像17这样的小n,使用
random.random
中的均匀分布也需要很长时间。是否有更好(更快)的方法来获得n-球面上的随机点?