4维球体上点的Python均匀分布

标签 python distribution trigonometry montecarlo polar-coordinates

我需要在 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()

enter image description here

只需将 dim = 3 更改为 dim = 4 即可在 4 球体上生成点。

关于4维球体上点的Python均匀分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15880367/

相关文章:

python - blobstore "Create_upload_url"的 GCS 等效项是什么?

statistics - 衡量两个分布之间的差异

python - 如何计算(正态)分布上的点的 p 值?

ios - acos和cos的度数未给出正确的结果

javascript - 在不使用三 Angular 函数的情况下返回近似正弦/余弦曲线的值的简单方法?

python - 在 Windows 上使用 Python 通过 USB 读取 iOS 设备生成和型号

python - 导入错误: No module named graphics

python MySQLdb在尝试INSERT INTO表时得到无效语法

android - 哪个android sdk版本要发布到市场?

c - GCC 使用的函数 rem_pio2f() 是什么?