5 次元空間が与えられた場合、コンポーネント値がランダムに分布する固定の大きさ = M を持つ 100 個のベクトルを生成したいと思います。
私は当初、単位ベクトルから始めて、回転行列を適用し、10 自由度のランダムなパラメーターを適用することを考えていました...これは機能しますか? そしてどうやって?
Javascriptでこれを行う良い方法はありますか...?
ポインタを乾杯!
5 次元空間が与えられた場合、コンポーネント値がランダムに分布する固定の大きさ = M を持つ 100 個のベクトルを生成したいと思います。
私は当初、単位ベクトルから始めて、回転行列を適用し、10 自由度のランダムなパラメーターを適用することを考えていました...これは機能しますか? そしてどうやって?
Javascriptでこれを行う良い方法はありますか...?
ポインタを乾杯!
これが私が使用するモンテカルロアルゴリズムです(私はJavascriptを頭のてっぺんからコーディングするのに十分な知識がありません):
5つの次元のそれぞれについて、-1から1の範囲のランダムな値を生成します。
マグニチュードMを計算します。M=0またはM>1の場合、これらの値を拒否して、ステップ#1に戻ります。
ベクトルを正規化して、大きさが1になるようにします(各次元をMで除算します)。
これにより、5次元の超球表面に均等に分散されたランダムな単位ベクトルが得られます。
質問がありました:「M> 1の場合、なぜベクトルを拒否するのですか?」
回答:最終的なベクトルがユニット5球の表面全体に均一に分布するようにします。
理由: 最初のステップで生成しているのは、ユニット5キューブのボリューム内に均一に分布しているランダムベクトルのセットです。それらのベクトルのいくつかは、ユニット5球のボリューム内にもあり、それらのいくつかは、そのボリュームの外側にあります。正規化すると、5球内のベクトルはその表面全体に均等に分散されますが、その外側のベクトルはまったく均等に分散されません。
次のように考えてください。通常の3次元のユニットキューブとユニットスフィア、またはユニットスクエアとユニットサークルの場合と同様に、ユニット5球はユニット5キューブ内に完全に含まれ、ユニット5キューブにのみ接触します。 5つの正の単位寸法軸ポイント:
(1,0,0,0,0)
(0,1,0,0,0)
(0,0,1,0,0)
(0,0,0,1,0)
(0,0,0,0,1)
および対応する負の単位軸ポイント。これは、これらが立方体の表面上で大きさ(原点からの距離)が1である唯一のポイントであるためです。他のすべてのポイントでは、5つの立方体の表面の原点からの距離が1より大きくなります。
これは、(0,0,0,0,0)と(1,1,1,1,1)の間には、(0,0,0,0,0)と( 1,0,0,0,0)。実際、SQRT(5)またはaprxについて。2.25倍以上。
つまり、ユニット5キューブにすべてのベクトルを含めると、(1 、0,0,0,0)。
これにより5D球の表面全体に均一に分布することに挑戦している人(基礎なし、IMHO)については、このWikipediaの記事セクションにある別の方法を参照してください:https://en.wikipedia.org/wiki / N-sphere#Uniformly_at_random_on_the_(n_%E2%88%92_1)-sphere
5 次元の単位ハイパーキューブからのサンプリングと再スケーリングの問題は、いくつかの方向 (ハイパーキューブの角に向かって) のポイントがオーバーサンプリングされることです。
しかし、拒否スキームを使用すると、あまりにも多くのサンプルが失われます。つまり、5 次元の単位超立方体の体積は pi^2*(8/15) = 5.26378901391432 です。それを、球だけを含む 5 次元の単位ハイパーキューブの体積と比較してください。そのハイパーキューブの体積は 32 です。したがって、球の外側にある点を拒否すると、拒否されます。
1 - 5.26378901391432/32 = 0.835506593315178
または約 83.5% のポイントが却下されます。つまり、5 球体の内側にあるサンプルを見つける前に、平均で約 6 ポイントをサンプリングする必要があります。
はるかに良いアイデアは、単位法線サンプルを使用してサンプリングし、そのポイントのベクトルを単位ノルムを持つように再スケーリングすることです。多変量正規分布は球対称であるため、棄却の必要はまったくありません。
ここにいくつかのアプローチがあります。これは単位ベクトル用ですが、M を掛けることができます。
拒否なしのピッキング(6倍高速)
MathworldとBitwiseによって投稿されたリンクから:
正規分布のn個の数値を選択し、それらを座標として扱い、結果のベクトルを単位ベクトルに正規化すると、n次元で均一に分布した単位ベクトルが選択されます。--Burtleburtle(htビット単位)
ビットワイズが指摘しているように、それは望ましい大きさで乗算されるべきです。
ここには拒否ステップがないことに注意してください。分布自体は、ゼロへの必要なバイアスを処理しています。正規分布と半円は同じ形ではないので、RBarryYoungの答えは本当に球の表面に均一な分布を与えるのではないかと思います。
超球除去を伴う均一な超立方体ピッキングについて(RBarryYoungの回答)
Mathworldの記事には、一様分布から選択された4つの乱数を使用して、3D球の表面上の乱数を計算する方法の説明が含まれています。RBarryYoungと同様に、単位超球外の乱数の4dベクトルに対して棄却を実行しますが、(a)余分な乱数を使用し、(b)抽出する数値に対して非線形変換を実行するという点で異なります。 3D単位ベクトル。
私にとって、これは、超球が除去された各軸での均一な分布では、球の表面全体での均一な分布が達成されないことを意味します。