一様分布の発生@多次元球面

  • 多次元球hypersphere上の一様分布は、ウィキペディア(こちら)には、2通りのやり方が紹介されている。
    • 多次元正規乱数を発生させて、その点を基準多次元球面上に投影する
    • 多次元一様乱数を発生させて、そのうち、多次元球の内部の点のみを採用して、それの基準多次元球面への投影をとる
      • 多次元一様乱数は多次元立方体であるが、その体積と多次元球との体積との比は、次元が上がるに連れて、急速に拡大するので、この方法では、高次元のとき、非現実的となる(発生する点のうち、ほとんどを捨てることになるから)
df<-6 # 次元
np<-10000 # 点の数
rs<-matrix(rnorm(df*np),nrow=np) # df次元正規乱数(正規乱数は中心からの距離(の2乗)に応じて確率が減少する
rssq<-rs^2 
ds<-sqrt(apply(rssq,1,sum)) # 発生点の原点からのユークリッド距離
rs<-rs/ds # 半径1の多次元球面に投影する

plot(as.data.frame(rs[,1:min(4,df)]),cex=0.1) # 2次元平面に投影