R 快速逐矩阵乘法

R 快速逐矩阵乘法,r,matrix-multiplication,vector-multiplication,R,Matrix Multiplication,Vector Multiplication,我需要乘以三个矩阵X(Nxk),FF(kxk)和X(Nxk)(再次)。这是T(席)*F**席,其中席是X的第i行,i=1:n。结果是一个具有n行的单列矩阵。乘法也可以看作是X*FF*t(X) (Nxk)表示“N行,k列”,*表示代数乘法,t()转置 问题是N相当大(超过100k)。我找到了一些使用and快速乘法的建议。但他们只考虑了问题的一半——由矩阵乘以向量。< /P> 由于X的大小,我想避免在两个阶段A=XFF,然后在(X)上进行乘法。因此,我需要的是一些函数或提示,它们将三个矩阵同时相乘(

我需要乘以三个矩阵X(Nxk),FF(kxk)和X(Nxk)(再次)。这是T(席)*F**席,其中席是X的第i行,i=1:n。结果是一个具有n行的单列矩阵。乘法也可以看作是X*FF*t(X)

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

问题是N相当大(超过100k)。我找到了一些使用and快速乘法的建议。但他们只考虑了问题的一半——由矩阵乘以向量。< /P> 由于X的大小,我想避免在两个阶段A=XFF,然后在(X)上进行乘法。因此,我需要的是一些函数或提示,它们将三个矩阵同时相乘(好的,尽可能多),以便在R中尽可能快地进行计算。

如果您只需要XFX',
drop
sweep
都是骗人的把戏。这些帖子描述了不同的问题

在进行任何操作之前,您可以查看
Matrix
是否为您提供了足够的速度


事实上,犰狳的链接对我来说真的很有价值,谢谢。事实上,记忆似乎有问题
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