R中的行矩阵乘法

RSK*_*RSK 5 r

我有一个维度为 1 亿条记录和 100 列的矩阵。

现在我想将该矩阵乘以 rowwise。

我的矩阵乘法示例代码是

df<-as.matrix(mtcars)
result<-apply(df,1,prod)
Run Code Online (Sandbox Code Playgroud)

就我而言,上述语法非常慢。

我在Rfast包中尝试了rowprods函数。

result<-rowprods(mtcars)
Run Code Online (Sandbox Code Playgroud)

但是上述功能给了我空间问题。

注意:我的系统中有 8 GB 内存。

F. *_*ivé 6

如果您的矩阵太大而无法放入内存,您可以使用bigstatsr包(免责声明:我是作者)来使用存储在磁盘(而不是 RAM)上的数据。使用函数big_apply使您能够在数据块上应用标准 R 函数(并组合它们)。

library(bigstatsr)
fbm <- FBM(10e6, 100)
# inialize with random numbers
system.time(
  big_apply(fbm, a.FUN = function(X, ind) {
    print(min(ind))
    X[, ind] <- rnorm(nrow(X) * length(ind))
    NULL
  }, a.combine = 'c')
) # 78 sec

# compute row prods, possibly in parallel
system.time(
  prods <- big_apply(fbm, a.FUN = function(X, ind) {
    print(min(ind))
    matrixStats::rowProds(X[ind, ])
  }, a.combine = 'c', ind = rows_along(fbm),
  block.size = 100e3, ncores = nb_cores())  
) # 22 sec with 1 core and 18 sec with 6 cores
Run Code Online (Sandbox Code Playgroud)