8

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次元で同様の分布を得るにはどうすればよいですか?

4

4 に答える 4

9

標準的な方法ですが、おそらく最速ではありませんが、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 つの球体上にポイントを生成できます。

于 2013-04-08T18:30:57.237 に答える
2

座標が正規分布する 4D 空間の点を取り、その単位ベクトルを計算します。これは、ユニット 4 球体になります。

from random import random
import math
x=random.normalvariate(0,1)
y=random.normalvariate(0,1)
z=random.normalvariate(0,1)
w=random.normalvariate(0,1)
r=math.sqrt(x*x + y*y + z*z + w*w)
x/=r
y/=r
z/=r
w/=r
print (x,y,z,w)
于 2013-04-08T14:31:56.913 に答える