我需要矩阵每列的加权和.
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),那就太棒了.
谢谢,感谢任何见解!
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)