我有一个维度为 1 亿条记录和 100 列的矩阵。
现在我想将该矩阵乘以rowwise。
我的矩阵乘法示例代码是
df<-as.matrix(mtcars)
result<-apply(df,1,prod)
就我而言,上述语法非常慢。
我试过 rowprods 函数在 Rfast 包裹。
result<-rowprods(mtcars)
但是上述功能给了我空间问题。
注意:我的系统中有 8 GB 内存。
最佳答案
如果您的矩阵太大而无法放入内存,您可以使用包 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
关于R中的行矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48879643/