【问题标题】: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)。我通过使用drop 和sweep 找到了一些快速乘法的建议。但他们只考虑了问题的一半——向量乘以矩阵。
由于 X 的大小,我想避免在两个阶段 A=XFF 和 At(X) 上相乘。所以我需要一些函数或提示,它将一次三个矩阵(嗯,尽可能多),以便在 R 中尽可能快地进行计算。
【问题讨论】:
标签:
r
matrix-multiplication
vector-multiplication
【解决方案1】:
如果你只需要XFX',drop 和 sweep 是红鲱鱼。这些帖子描述了不同的问题。
您可以先查看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