特異値分解による部分座標化
# たとえば # 空間の次元 df<-6 # 点の数 k<-4 # 点の座標を作る RR<-matrix(rnorm(df*k),ncol=df) # 点の位置ベクトルのノルムと位置ベクトルペアの内積を計算する out1<-RR%*%t(RR) # 特異値分解 svd.out<-svd(t(RR)) # 特異値分解の結果と、点の元の座標を用いて # k次元座標にする RR2<-RR%*%svd.out[[2]] # そのノルムとペア内積 out2<-RR2%*%t(RR2) # 見てみる print(RR) print(RR2) # df次元とk次元とで差がない print(range(out1-out2)) # k点がk次元座標になっているので、そのうちの1点を原点に取り直せばk-1次元になる # そうなっていることを何度も確かめる回数 Niter<-100 # 確かめるループ for(i in 1:Niter){ # 空間の次元をループのたびに適当に取る df<-sample(2:20,1) # 点の数をループのたびに適当に取る k<-sample(2:df,1) # 点の座標を作る RR<-matrix(rnorm(df*k),ncol=df) # 点の位置ベクトルのノルムと位置ベクトルペアの内積を計算する out1<-RR%*%t(RR) # 特異値分解 svd.out<-svd(t(RR)) # 特異値分解の結果と、点の元の座標を用いて # k次元座標にする RR2<-RR%*%svd.out[[2]] # そのノルムとペア内積 out2<-RR2%*%t(RR2) # df次元とk次元とで差がない print(range(out1-out2)) }