-1

我需要将三个矩阵 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=X FF 和 A t(X) 上进行乘法运算。所以我需要一些函数或提示,它可以一次将三个矩阵相乘(嗯,最多可能),以便在 R 中尽可能快地进行计算。

4

1 回答 1

0

如果你只需要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 
于 2016-03-12T13:16:51.653 回答