相关疑难解决方法(0)

使累积总和更快

我正在尝试为矩阵的每一列取累积和.这是我在R中的代码:

testMatrix = matrix(1:65536, ncol=256);
microbenchmark(apply(testMatrix, 2, cumsum), times=100L);

Unit: milliseconds
                         expr      min       lq     mean  median       uq      max neval
 apply(testMatrix, 2, cumsum) 1.599051 1.766112 2.329932 2.15326 2.221538 93.84911 10000
Run Code Online (Sandbox Code Playgroud)

我用Rcpp进行比较:

cppFunction('NumericMatrix apply_cumsum_col(NumericMatrix m) {
    for (int j = 0; j < m.ncol(); ++j) {
        for (int i = 1; i < m.nrow(); ++i) {
            m(i, j) += m(i - 1, j);
        }
    }
    return m;
}');
microbenchmark(apply_cumsum_col(testMatrix), times=10000L);

Unit: microseconds
                         expr     min      lq     mean  median      uq      max neval
 apply_cumsum_col(testMatrix) 205.833 …
Run Code Online (Sandbox Code Playgroud)

r rcpp

9
推荐指数
2
解决办法
1406
查看次数

从 R 中的大型矩阵或 data.table 中按索引提取单行的最快方法?

目标背景:
我需要对具有数百万行的大型 R 对象的特定单独行执行计算。这些计算涉及一系列矩阵乘法。这些计算本身经过优化,可以快速运行,并且我的代码的进一步优化需要克服快速选择我们将执行计算的行的瓶颈。

问题:
我找到的用于从 data.table 或其他 R 对象中选择特定行的每个方法的运行速度都比我在该行上执行的计算慢得多。这里有一个有点类似的问题(R中矩阵的快速子集),推荐的解决方案是在Rcpp中对矩阵本身进行计算,而不提取行。这需要我用 C++ 重写所有计算,如果有足够有效的方法在 R 中按索引对行进行子集化,我希望避免这种情况。

示例代码

library(dplyr)
library(data.table)
data(mtcars) # for a replicable example

mtcars_data_table <- as.data.table(mtcars) # Convert to data.table
rownames(mtcars) <- seq(1, nrow(mtcars)) # Change row names to numerical index for each row

i = 1 # Set a dummy iterator variable to one to demonstrate code as it would be used inside a for loop

microbenchmark(mtcars_data_table[i,], times=10000) # The data.frame way
microbenchmark(mtcars_data_table[i], times=10000) # The …
Run Code Online (Sandbox Code Playgroud)

database r matrix data.table

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

标签 统计

r ×2

data.table ×1

database ×1

matrix ×1

rcpp ×1