gpt4 book ai didi

python - 在 N 球面上生成均匀分布的随机点的算法

转载 作者:行者123 更新时间:2023-12-01 01:31:36 24 4
gpt4 key购买 nike

我还没有在Python上找到这种算法的实现

类似这样的事情:

有两个输入参数:

  • n - 空间维度。
  • m - n-1 球体上的点数。

我需要将它们大致均匀地排列在 n 球体的表面上。

坐标轴位于n-1个球体的中心。例如,在 3d 中,可以在规则球体上定位点 like this

在我看来,斐波那契算法在视觉上非常好。我不知道n-sphere是否有类似的东西。我有 512D 空间,我要在其中放置 1000 甚至 10,000 个点。

如何在 python 中执行此操作?

最佳答案

很简单Muller and Marsaglia方法在超球面上生成均匀分布。

生成 n 个具有高斯分布的变量(此处列出 l)。它们形成一些向量。

查找该向量的长度并标准化其分量以提供单位长度结果

示例显示了 10 维空间中球体上一个点的生成,并且还直观地检查了圆上点包的均匀性(2 维中的球体,直方图值应该接近)

import random, math

#muller-marsaglia method
def spherepicking(n):
while True: #to get rid off [0,0,0,0] case
l = [random.gauss(0, 1) for i in range(n)]
sumsq = sum([x * x for x in l])
if sumsq > 0:
break
norm = 1.0 / math.sqrt(sumsq)
pt = [x * norm for x in l]
return pt

print(spherepicking(10))

cnt = [0] * 18
for i in range(10000):
pt = spherepicking(2)
an = math.atan2(pt[1], pt[0]) + math.pi / 2
cnt[math.floor(an * 9 / math.pi)] += 1
print(cnt)

-0.31811419572739935, 0.2845442135156396, -0.2849019746359018,
-0.1326796017012003, 0.7388447238721524, -0.287062305232526,
-0.08794741714783766, 0.131707880836534, 0.22059937624019868,
-0.13047162618106062]

[554, 560, 529, 589, 534, 538, 550, 558, 578, 556, 522, 553, 561, 513, 592, 583, 593, 537]

关于python - 在 N 球面上生成均匀分布的随机点的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52808880/

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