3
我有一個不同大小的矩陣列表。我如何快速總結矩陣列表中的所有元素?在R中加上矩陣列表
這是我目前的代碼,但它很慢。有更快的方法嗎?
for (i in 1: length(w)) {
w_sum <- w_sum + sum(apply(w[[i]], 1:2, function (x) x^2))
}
我有一個不同大小的矩陣列表。我如何快速總結矩陣列表中的所有元素?在R中加上矩陣列表
這是我目前的代碼,但它很慢。有更快的方法嗎?
for (i in 1: length(w)) {
w_sum <- w_sum + sum(apply(w[[i]], 1:2, function (x) x^2))
}
矩陣是引擎蓋下只是載體,因此你可以unlist
,方形和sum
:
sum(unlist(w)^2)
#[1] 2393
使用@ akrun的示例數據,給出了相同的結果。
這是更快,如果你有矩陣噸:
w <- rep(list(matrix(1:24,nrow=6)), 1e6)
system.time(sum(unlist(w)^2))
# user system elapsed
# 0.11 0.00 0.10
system.time(sum(vapply(w, function(x) sum(x^2), numeric(1))))
# user system elapsed
# 2.17 0.00 2.17
循環也不必在這種情況下慢得離譜對比:
w_sum <- 0
system.time(for(i in seq_along(w)) { w_sum <- w_sum + sum(w[[i]]^2) })
# user system elapsed
# 2.62 0.00 2.62
這是我的結果,我錯過了什麼嗎? > system.time(replicate(30000,sum(vapply(w,function(x)sum(x^2),numeric(1))))) 用戶系統已用過 1.64 0.38 2.02 > system.time(replicate 30000,sum(unlist(w)^ 2))) user system elapsed 2.81 0.41 3.22 – Adam12344
@ Adam12344 - 我無法複製這些結果。 'vapply'的'0.84'秒和'unlist'的'0.07'秒 – thelatemail