10

2 つの大きな行列のクロネッカー積を計算する効率的な方法を探しています。私は次のようにメソッドkronecker()を使用してみました:

 I = diag(700)
 data = replicate(15, rnorm(120))
 test = kronecker(I,data)

ただし、実行に時間がかかり、次のエラーが発生します。

 Error: cannot allocate vector of size 6.8 Gb
4

2 に答える 2

13

を使用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"
于 2013-09-17T14:00:29.083 に答える