获取R中矩阵列的加权和的最快方法

Ani*_*ban 7 r sum weighted

我需要矩阵每列的加权和.

data <- matrix(1:2e7,1e7,2) # warning large number, will eat up >100 megs of memory
weights <- 1:1e7/1e5
system.time(colSums(data*weights))
system.time(apply(data,2,function(x) sum(x*weights)))
all.equal(colSums(data*weights), apply(data,2,function(x) sum(x*weights)))
Run Code Online (Sandbox Code Playgroud)

通常colSums(data*weights)比应用调用更快.

我经常做这个操作(在一个大矩阵上).因此寻找有关最有效实施的建议.理想情况下,如果我们可以将权重传递给colSums(或rowSums),那就太棒了.

谢谢,感谢任何见解!

mne*_*nel 8

colSums并且*都是内部或原始函数,并且比apply方法快得多

您可以尝试的另一种方法是使用一些基本的矩阵代数

 weights %*% data
Run Code Online (Sandbox Code Playgroud)

矩阵乘法方法看起来并不快,但它会避免创建一个大小为的临时对象 data

system.time({.y <- colSums(data * weights)})
##  user  system elapsed 
##  0.12    0.03    0.16 


system.time({.x <- weights %*% data})
##   user  system elapsed 
##   0.20    0.05    0.25 
Run Code Online (Sandbox Code Playgroud)