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