Kronecker product for large matrices

后端 未结 2 2110
有刺的猬
有刺的猬 2021-01-02 13:13

I am looking for an effficient way of computing the Kronecker product of two large matrices. I have tried using the method kronecker() as follows:



        
相关标签:
2条回答
  • 2021-01-02 13:33

    As long as you use Matrix::Diagonal to construct your diagonal matrix, you'll automatically get your test object constructed as a sparse matrix:

    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"
    
    0 讨论(0)
  • 2021-01-02 13:46

    If you are computing kron(I,A)*v where v is a vector you can do this using vec(A*V) where V reshapes v into a matrix. This uses the more general rule that vec(ABC)=kron(C',A)*vec(B). This avoids forming the Kronecker product and uses far less operations to perform the computation.

    Note that V may need to be transposed depending on how matrix storage is handled (columns versus rows).

    0 讨论(0)
提交回复
热议问题