我需要在 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 个维度的相似分布?
最佳答案
A standard way ,虽然,也许not the fastest , 就是用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
更改为 dim = 4
即可在 4 球体上生成点。
关于4维球体上点的Python均匀分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15880367/