逐矩阵快速乘法矩阵

fast multiplication matrix by matrix by matrix

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

(Nxk)代表"N rows, k columns",*为代数乘法,t()转置。

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

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

如果您只需要 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