2 つの大きな行列のクロネッカー積を計算する効率的な方法を探しています。私は次のようにメソッドkronecker()
を使用してみました:
I = diag(700)
data = replicate(15, rnorm(120))
test = kronecker(I,data)
ただし、実行に時間がかかり、次のエラーが発生します。
Error: cannot allocate vector of size 6.8 Gb
を使用Matrix::Diagonal
して対角行列を構築している限り、オブジェクトは自動的にtest
疎行列として構築されます。
library(Matrix)
I=Diagonal(700)
data = replicate(15,rnorm(120))
system.time(test <- kronecker(I,data))
## user system elapsed
## 0.600 0.044 0.671
dim(test)
## [1] 84000 10500
format(object.size(test),"Mb")
## [1] "19.2 Mb"