R中的行矩阵乘法

标签 r

我有一个维度为 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/

相关文章:

r - 如何使用 difftime 计算前一行值的天数差异?

r - Rmarkdown 中同一行的 Kableextra 表和 ggplot 图(PDF - 不是 Flexdashboard)

r - 如何渲染 HTML 风格的传单标签?

r - 基于列值在 R 中编号

r - 引用 R 中的另一个表组合表

r - 性能:具有多次调用的全局和局部声明

正则表达式——将一列拆分为多列,在 R 中没有明确的分隔符

r - 正确使用可选包功能和依赖项

r - 使用data.table标记组中的第一个(或最后一个)记录

r - 如何在 R 包中加载已编译的库