分からんこと多すぎ

何故か就職できたので技術磨く。一人前の多重線形代数使いを目指しつつ、機械学習、データマイニングをやる

R言語でテンソルを解析する_bind編

R言語で(数万×数万×数万)からなるテンソルを扱うキチ◯イのために、テンソルを処理してbindする方法を書いておく。

R言語ではおそらく、slamパッケージ以外に巨大な疎テンソルを扱う方法が存在しない。
したがって、以下ではslamパッケージを使うことを前提としている。

また、doMCパッケージも用いるが、これは、並列化のためのパッケージである。
便利なことに、.combineという引数で、中のデータを結合することができる。

イメージ的には、do.callとかReduceでcbindする感じ。
これを利用してbindする。

.combineによってabind_simple_sparse_arrayをすると、中で作られたsimple_sparse_arrayを任意の方向に(MARGINで指定した方向に)結合することができる。

サンプルコードは以下。

data1という全要素が1のsimple_sparse_arrayと、data2という全要素が2のsimple_sparse_arrayを、MARGIN=3(奥行方向)に結合している。

library('slam')
library('doMC')
registerDoMC(2)

data <- foreach(i = 1:2, .combine = function(...){ abind_simple_sparse_array(...,MARGIN=3)} ) %dopar% {
  as.simple_sparse_array(array(i,c(4,3,2)))
}

> as.array(data)
, , 1

     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    1    1    1
[3,]    1    1    1
[4,]    1    1    1

, , 2

     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    1    1    1
[3,]    1    1    1
[4,]    1    1    1

, , 3

     [,1] [,2] [,3]
[1,]    2    2    2
[2,]    2    2    2
[3,]    2    2    2
[4,]    2    2    2

, , 4

     [,1] [,2] [,3]
[1,]    2    2    2
[2,]    2    2    2
[3,]    2    2    2
[4,]    2    2    2