我需要 4 维球体上均匀分布的点。我知道这并不像选择 3 个角度并使用极坐标那么简单。
在 3 维中我使用
from random import random
u=random()
costheta = 2*u -1 #for distribution between -1 and 1
theta = acos(costheta)
phi = 2*pi*random
x=costheta
y=sin(theta)*cos(phi)
x=sin(theta)*sin(phi)
这给出了 x、y 和 z 的均匀分布。
如何获得 4 个维度的相似分布?
标准方式 https://stats.stackexchange.com/a/7984/842,不过,也许不是最快的 http://dx.doi.org/10.1214/aoms/1177692644,就是利用 Muller 方法在 N 球体上生成均匀分布的点:
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as axes3d
N = 600
dim = 3
norm = np.random.normal
normal_deviates = norm(size=(dim, N))
radius = np.sqrt((normal_deviates**2).sum(axis=0))
points = normal_deviates/radius
fig, ax = plt.subplots(subplot_kw=dict(projection='3d'))
ax.scatter(*points)
ax.set_aspect('equal')
plt.show()
只需改变dim = 3
to dim = 4
在 4 球体上生成点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)