3次元単位球の表面に均一に分布した点を生成する方法は?


68

3次元単位球の表面に均一に分布した点を生成する方法を疑問に思っていますか?また、これらのポイントを生成した後、それらが表面真に均一であるかどうかを視覚化して確認する最良の方法は何ですか?x2+y2+z2=1


ユニフォームで「通常」を意味する場合、 = 2、4、6、8、12、20以外ではそうする方法はありませんn
Marcos

1
MultiVariateGaussianのサンプルの何が問題であり、そのベクトルはそれを正規化するだけです:v = MultivariateNormal(torch.zeros(10000), torch.eye(10000))そして v = v/v.norm(10000)
ピノキオ

回答:


72

標準的な方法は、3つの標準法線を生成し、それらから単位ベクトルを構築することです。つまり、および場合、は一様に球体に分布しています。この方法は、次元の球体にも適しています。λ 2 = X 2 1 + X 2 2 + X 2 3X 1 / λ X 2 / λ X 3 / λ DXiN(0,1)λ2=X12+X22+X32(X1/λ,X2/λ,X3/λ)d

3Dでは、リジェクションサンプリングを使用できます。の長さが1以下になるまで、均一な分布からを描画します。その後、前述の方法と同様に、ベクトルを単位長に正規化します。球面ポイントあたりの予想試行回数は、 = 1.91です。高次元では、予想される試行回数が非常に多くなるため、急速に実行不可能になります。 [ - 1 1 ] X 1X 2X 32 3 /4 π / 3 Xi[1,1](X1,X2,X3)23/(4π/3)

均一性をチェックする方法はたくさんあります。きちんとした方法は、多少計算負荷がかかりますが、リプリーのK関数を使用します。球上の任意の場所の(3Dユークリッド)距離内にある点の予想数は、距離内の球の面積に比例します。これは等しくなります。すべての点間距離を計算することにより、データをこの理想と比較できます。ρ π ρ 2ρρπρ2

統計グラフィックスを構築する一般的な原則は、比較を行う良い方法として、分散安定化残差をに対してプロットすることをここで、は相互距離の最小ので、です。プロットはゼロに近いはずです。(このアプローチは型破りです。)I = 1 2 ... N N - 1 / 2 = m個のD [ I ] I 番目のE I = 2 ei(d[i]ei)i=1,2,,n(n1)/2=md[i]ithei=2i/m

以下は、最初の方法で得られた均一な球面分布からの100の独立したドローの写真です。

100個の均一な球面ポイント

距離の診断プロットは次のとおりです。

診断プロット

yスケールは、これらの値がすべてゼロに近いことを示しています。

このような100個のプロットの累積は、サイズの偏差が実際に不均一性の重要な指標になる可能性があることを示唆しています。

シミュレーション値

(これらのプロットはブラウン橋のようにひどく見えます...ここに潜んでいる興味深い理論的発見があるかもしれません。)

最後に、100個の均一なランダムポイントに加えて、上半球にのみ均一に分布する別の41個のポイントの診断プロットを示します。

シミュレートされた不均一値

均一な分布と比較して、1つの半球の範囲までの平均点間距離の大幅な減少を示しています。それ自体は無意味ですが、ここで役立つ情報は、何かが1つの半球のスケールで不均一であるということです。実際、このプロットは、一方の半球の密度が他方と異なることを容易に検出します。(無限大の可能性のある半球のうち、どの半球をテストするかを事前に知っていれば、より簡単なカイ2乗検定でより強力になります。)


@whuber:とてもいいね!投稿ありがとうございます!「は球体上に均一に分布しています。」その証拠についての参照はどこで見つけることができますか、それとも単に証明可能ですか?(X1/λ,X2/λ,X3/λ)
チャンリー

23
@Qiang、ここプルーフの本質です:う表し単位行列です。その後のための任意の直交行列、。したがって、の分布は回転下では不変です。してみましょうとその注意任意の直交するため。以来回転に対して不変である、そうである、それ以来、、ほぼ確実に、それは一様球上に分散する必要があります。XN(0,In)Inn×nQQXN(0,In)XY=X/X2YQ=QX/QX2=QX/X2QXYY2=1
カーディナル

3
@Mikeいいえ、緯度の均一な分布では球体上の均一な分布が得られないためです。(球体の表面のほとんどは、極から離れた赤道付近の低緯度にあります。代わりに、均一な分布が必要です。)ϕcos(ϕ)
whuber

1
@Ahsan直交行列は球の面積保存変換の推移的なグループを形成するため、分布は形の球のサブセットにわたって均一ですが、これは球全体です。X/||X||2
whuberの

1
@Cesar「均一分布」(球体上)。
whuber

19

以下は、かなり単純なRコードです。

n     <- 100000                  # large enough for meaningful tests
z     <- 2*runif(n) - 1          # uniform on [-1, 1]
theta <- 2*pi*runif(n) - pi      # uniform on [-pi, pi]
x     <- sin(theta)*sqrt(1-z^2)  # based on angle
y     <- cos(theta)*sqrt(1-z^2)     

構造からあり、であることがわかりますが、テストする必要がある場合はx2+y2=1z2x2+y2+z2=1

mean(x^2+y^2+z^2)  # should be 1
var(x^2+y^2+z^2)   # should be 0

そして、とそれぞれが(明らかに)に均一に分布していることをテストするのは簡単です。xy[1,1]z

plot.ecdf(x)  # should be uniform on [-1, 1]
plot.ecdf(y)
plot.ecdf(z)

明らかに、値が与えられると、とは半径円の周りに均一に分布し、これはそれらの比率のアークタンジェントの分布を調べることでテストできます。ただし、はおよびと同じ周辺分布を持っているため、どのペアについても同様のステートメントが当てはまり、これもテストできます。 zxy1z2zxy

plot.ecdf(atan2(x,y)) # should be uniform on [-pi, pi]
plot.ecdf(atan2(y,z))
plot.ecdf(atan2(z,x))

それでも確信が持てない場合、次のステップは、任意の3D回転または特定の立体角内にあるポイントの数を調べることですが、それはより複雑になり始め、不要であると思います。


ポイント(x、y、z)を生成する方法が本質的にwhuberの方法と同じかどうか疑問に思っていますか?
強李

3
いいえ、そうではありません。whuberは3つの乱数を使用しますが、2つを使用します。私の場合は、「上の点を適切な密度[比例するで生成し、次元を下げる」という特殊なケースです。これは正式には2-sphereここでは便利です。[1,1](1z2)n/21n=2
ヘンリー

3
または、より一般的には、等面積投影法(円筒形の等面積投影法)を使用してマップ上に均一なポイントを生成し、次に投影し直します。(+1)
whuber

@whuber:確かに。オフトピックですが、興味のある方のために、ここで世界地図投影法のインタラクティブな選択をしています。そのうちのいくつかは平等なエリアです
ヘンリー

2
:これはかなりアルキメデスのハットボックスの定理をベースコンピュータグラフィックスで使用される標準的なアプローチであり、mathworld.wolfram.com/ArchimedesHat-B​​oxTheorem.html
エドワードKMETT

10

3D球体(3Dボールの表面)に均一に分布した点をサンプリングする場合は、単純な拒否、またはMarsagliaの方法(Ann。Math。Statist。、43(1972)、pp。645– 646)。低次元の場合、棄却率は非常に低くなります。

高次元の球体とボールからランダムポイントを生成する場合、シミュレーションの目的とスケールに依存します。大規模なシミュレーションを実行したくない場合は、Mullerの方法(Commun。ACM、2(1959)、pp。19–20)またはその「ボール」バージョン(上記のHarman&Lackoの論文を参照)を使用してください。あれは:

n球(表面)に均一に分布するサンプルを取得するには1)n次元の標準正規分布からXを生成する2)Xの各成分をXのユークリッドノルムで除算する

nボール(内部)に均一に分布するサンプルを取得するには1)(n + 2)次元の標準正規分布からXを生成します2)Xの各成分をXのユークリッドノルムで除算し、最初のn成分のみを取得します

大規模なシミュレーションを実行する場合は、より専門的な方法を調査する必要があります。リクエストに応じて、この議論で言及したいくつかのアルゴリズムの分類と一般化を提供する条件付き配布方法に関するHarmanとLackoの論文をお送りします。連絡先は私のウェブサイト(http://www.iam.fmph.uniba.sk/ospm/Lacko)で入手できます。

Youtポイントがボールの表面または内部で本当に均一であるかどうかを確認する場合は、周辺を見てください(回転不変性のため、投影されたサンプルの2乗ノルムはベータ分布です)。


MultiVariateGaussianのサンプルの何が問題であり、そのベクトルはそれを正規化するだけです:v = MultivariateNormal(torch.zeros(10000), torch.eye(10000))そして v = v/v.norm(10000)
ピノキオ

8

私は博士号取得中に同様の問題(n球体)を経験し、地元の「専門家」の1人がnキューブからの拒絶サンプリングを提案しました!もちろん、私がnをhunderdsの順に見ていたので、これは宇宙の時代をとっていただろう。

最終的に使用したアルゴリズムは非常にシンプルで、以下で公開されています。

n球からのWP PetersenおよびA. Bernasconic Uniformサンプリング:等方性手法テクニカルレポート、TR-97-06、スイス科学センター

私が見たことのない参考文献にもこの論文があります。役に立つかもしれません。

Harman、R.&Lacko、V.球と球からの均一サンプリングの分解アルゴリズムについてJournal of Multivariate Analysis、2010nn


これらの参照の全文を見つけることができるリンクを投稿することは可能ですか?ありがとう。
チャンリー

私には論文はありませんが、このページではアルゴリズム(および他のいくつか)について説明しているようですmlahanas.de/Math/nsphere.htm
emakalic

3
私が理解しているように、(PetersenとBernasconicの論文から)d次元のボールの場合、U(0,1)変量を(1 / d)乗、最後の角度をa U(0,2)変量。中間角はとして取得できます、ここでは。私にはこれはかなり簡単に聞こえます。私が不思議に思っているのは、ユニフォームに準ランダムシーケンスを使用する場合、ボールの素晴らしさも得られるでしょうか?πC.asin(uk)C1
πΓ(k2+0.5)Γ(k2+1)
Mohit

3

私は以前にこの問題を抱えていましたが、ここに私が見つけた代替案があります、

分布自体については、うまく機能することがわかった公式は、極座標を使用し(実際に開発したポーラー座標のバリエーションを使用する)、次にデカルト座標に変換することです。

もちろん、半径はプロットする球体の半径です。次に、平面上の角度の2番目の値があり、その平面の上または下の角度である3番目の値が続きます。

適切な分布を得るには、Uが一様に分布した乱数、rが半径、aが2番目の極座標、bが3番目の極座標であると仮定します。

a = U * 360 b = U + U-1その後、x = r * sin(b)sin(a)z = r sin(b)cos(a)y = r sin(b)を介してデカルトに変換

最近、数学的にはa = 2(pi)* U b = cos ^ -1(2U-1)の方が良いとわかりました

私の学位は度とラジアンですが、実際には私の元の式と大差はありません。

この最新バージョンはハイパースフィアに使用できると思われますが、その実現方法については言及されていません。

Homeworld 2のマップを作成し、それらのマップを「再生」するというかなり安価な方法で、視覚的に均一性をチェックしますが。実際、マップはluaスクリプトで作成されているため、数式をマップに直接組み込み、ゲームを離れることなく複数のサンプリングをチェックできます。おそらく科学的ではありませんが、結果を視覚的に見るには良い方法です。


2

擬似コードは次のとおりです。

  1. vMultiVariateGaussian(μ,σI)
  2. v=vv

pytorchの場合:

v = MultivariateNormal(torch.zeros(10000), torch.eye(10000))
v = v/v.norm(2)

私はこれを十分に理解していませんが、whuberから次のように言われました:

v = torch.normal(torch.zeros(10000), torch.eye(10000))
v = v/v.norm(2)

各座標の単変量法線からのサンプリングも正しいです。


0

私の最善の推測は、最初に2次元空間に均一に分布した点のセットを生成し、次に何らかの投影を使用してそれらの点を球の表面に投影することです。

おそらく、ポイントを生成する方法とマップする方法を組み合わせて一致させる必要があります。2Dポイント生成の観点からは、スクランブルされた低差異のシーケンスは開始するのに適した場所(つまり、スクランブルされたSobolシーケンス)になると思います。どのタイプのマッピングを使用するのかはわかりませんが、WoflramがGnonomicプロジェクションをポップアップしました...それでうまくいくかもしれません。

MATLABには、を使用q = sobolset(2)して生成したり、を使用してスクランブルしたりできる低不一致シーケンスの適切な実装がありますq = scramble(q)。MATLABには、マッピングとグラフィックスを自分でコーディングしたくない場合に使用できるさまざまな投影関数を備えたマッピングツールボックスもあります。


1
これらの投影のいずれかで、ランダム性の均一性を維持できますか?繰り返しますが、これらのポイントの最終的な分布が球体の表面に本当に均一に分布しているかどうかをどのように確認できますか?ありがとう。
チャンリー

申し訳ありませんが、単に仮説的に話していました... MATLABのマッピング関数を使用すると、ビジュアライゼーションが埋め込まれているため、それを確認できると思います。そうでない場合は、ランダム化された角度などを使用して、3Dで球上に均一に分布したポイントを生成する方法について説明している素敵なWebサイトも見つけました。
ご覧

3
ノモニックは面積が等しくないため、ノーム投影上の均一なランダムポイントは球上で均一ではありません。ヘンリー、によって提案された突起 - >(経度、緯度から矩形へ)であり、等しい面積。λ sin ϕ R 2(λ,ϕ)(λ,sin(ϕ))R2
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.