小编max*_*low的帖子

R中矩阵的快速子集

我面临以下问题:我需要很多大矩阵的子集.实际上我只需要视图作为另一个函数f()的输入,所以我不需要更改值.然而,似乎R对于这项任务非常缓慢,或者我做错了什么(似乎更有可能).玩具示例说明了选择列所需的时间,然后在另一个函数中使用它们(在这个玩具示例中,原始函数sum()).作为"基准",我还测试了计算时间,而不是总计整个矩阵,这显然更快.我也尝试了包ref,但无法获得任何性能提升.所以关键问题是如何在不复制矩阵的情况下对矩阵进行子集化?我感谢任何帮助,谢谢!

library(microbenchmark)
library(ref)

m0 <- matrix(rnorm(10^6), 10^3, 10^3)
r0 <- refdata(m0)
microbenchmark(m0[, 1:900], sum(m0[, 1:900]), sum(r0[,1:900]), sum(m0))
Run Code Online (Sandbox Code Playgroud)
Unit: milliseconds
             expr       min        lq      mean    median        uq
      m0[, 1:900] 10.087403 12.350751 16.697078 18.307475 19.054157
 sum(m0[, 1:900]) 11.067583 13.341860 17.286514 19.123748 19.990661
 sum(r0[, 1:900]) 11.066164 13.194244 16.869551 19.204434 20.004034
          sum(m0)  1.015247  1.040574  1.059872  1.049513  1.067142
       max neval
 58.238217   100
 25.664729   100
 23.505308   100
  1.233617   100
Run Code Online (Sandbox Code Playgroud)

求和整个矩阵的基准任务需要1.059872毫秒,比其他函数快16倍.

performance r matrix ref

5
推荐指数
1
解决办法
643
查看次数

标签 统计

matrix ×1

performance ×1

r ×1

ref ×1