2024-05-13 17:45:44 发布
网友
我还没有在Python上找到这种算法的实现
像这样:
有两个输入参数:
我需要把它们大致均匀地排列在n球的表面上。在
坐标轴位于n-1球体的中心。 例如,在规则球体上的3d中,可以定位点like this
在我看来,Fibonacci算法在视觉上非常好。 我不知道n球是否有类似的东西。 我有512D空间,我要在里面放1000点甚至10000点。在
如何在python中实现这一点?在
有一种简单的Muller and Marsaglia方法可以在超球面表面生成均匀分布。在
生成具有高斯分布的n个变量(在这里列出l)。它们形成了一些向量。在
l
求出该向量的长度,并将其分量规格化以提供单位长度的结果
示例显示了10d空间中球体上一个点的生成,还直观地检查了圆上点集合的均匀性(2d中的球体,hystogram值应接近)
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]
有一种简单的Muller and Marsaglia方法可以在超球面表面生成均匀分布。在
生成具有高斯分布的n个变量(在这里列出
l
)。它们形成了一些向量。在求出该向量的长度,并将其分量规格化以提供单位长度的结果
示例显示了10d空间中球体上一个点的生成,还直观地检查了圆上点集合的均匀性(2d中的球体,hystogram值应接近)
相关问题 更多 >
编程相关推荐