【问题标题】:fast multiplication matrix by matrix by matrix快速矩阵乘法矩阵
【发布时间】:2016-03-12 09:10:58
【问题描述】:

我需要将三个矩阵 X(Nxk)、FF(kxk) 和 X(Nxk) 相乘(再次)。即 t(xi) * FF * xi,其中 xi 是 X 的第 i 行,i=1:N。结果将是具有 N 行的单列矩阵。乘法也可以看作是 X * FF * t(X)。

(Nxk) 代表“N行,k列”,*是代数乘法,t()转置。

问题是 N 相当大(超过 100k)。我通过使用dropsweep 找到了一些快速乘法的建议。但他们只考虑了问题的一半——向量乘以矩阵。

由于 X 的大小,我想避免在两个阶段 A=XFF 和 At(X) 上相乘。所以我需要一些函数或提示,它将一次三个矩阵(嗯,尽可能多),以便在 R 中尽可能快地进行计算。

【问题讨论】:

    标签: r matrix-multiplication vector-multiplication


    【解决方案1】:

    如果你只需要XFX'dropsweep 是红鲱鱼。这些帖子描述了不同的问题。

    您可以先查看Matrix 是否为您提供足够的速度,然后再转到more involved

    library(Matrix)
    library(microbenchmark)
    
    # sparse matrix from Matrix
    data(CAex)
    
    # create a possible FF
    set.seed(1)
    FF = matrix(rnorm(length(CAex)), nrow = nrow(CAex), ncol = nrow(CAex))
    
    # not a sparse matrix
    CA = as.matrix(CAex)
    
    microbenchmark(
      matrix = CA %*% crossprod(FF, CA),
      Matrix = CAex %*% crossprod(FF, CAex))
    
    # Unit: microseconds
    #    expr     min      lq     mean   median      uq      max neval cld
    #  matrix 561.170 563.952 654.8408 588.1250 651.673 1403.389   100   b
    #  Matrix  94.356 102.866 173.1130 119.9435 165.542 1815.316   100  a 
    

    【讨论】:

    • 其实犰狳的链接对我来说真的很有价值,谢谢。
    • 其实问题出在内存上
    猜你喜欢
    • 2017-01-25
    • 1970-01-01
    • 2015-04-07
    • 2011-11-30
    • 2015-04-08
    • 1970-01-01
    • 2016-06-25
    • 2013-03-26
    • 1970-01-01
    相关资源
    最近更新 更多