gpt4 book ai didi

python - 通过计算在 n 球面上选取一个随机点

转载 作者:行者123 更新时间:2023-12-02 20:30:48 25 4
gpt4 key购买 nike

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

最佳答案

根据Muller, M. E. "A Note on a Method for Generating Points Uniformly on N-Dimensional Spheres"您需要创建一个由 n 个高斯随机变量组成的向量并除以它的长度:

import random
import math

def randnsphere(n):
v = [random.gauss(0, 1) for i in range(0, n)]
inv_len = 1.0 / math.sqrt(sum(coord * coord for coord in v))
return [coord * inv_len for coord in v]

正如 @Bakuriu 在评论中所述,使用 numpy.random 可以在处理较大向量时为您提供性能优势。

关于python - 通过计算在 n 球面上选取一个随机点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38038776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com