在Python中生成Euclidean范数<= 1的随机向量?

lam*_*lus 12 python random numpy

更具体地,给定自然数d,如何在R ^ d中生成随机向量,使得每个向量x具有欧几里德范数<= 1?

通过numpy.random.rand(1,d)生成随机向量是没有问题的,但是这种具有范数<= 1的随机向量的可能性对于即使不小的d也是可预测的.例如,即使对于d = 10,约0.2%的这种随机向量具有适当小的范数.所以这似乎是一个愚蠢的解决方案.

编辑:回复:沃尔特的评论,是的,我正在寻找R ^ d中单位球中向量的均匀分布.

use*_*ica 9

根据Wolfram Mathworld关于超球点选择的文章和Nate Eldredge对math.stackexchange.com上类似问题的回答,您可以通过生成d独立高斯随机变量向量和U在闭区间均匀分布的随机数来生成这样的向量[0, 1],然后将矢量标准化为规范U^(1/d).