матрицы являются только векторы под капотом, следовательно, вы можете 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
Loops также не должны быть невероятно медленно в этом обстоятельстве в сравнении:
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), числовое (1))))) пользовательская система истекло 1,64 0,38 2,02 > system.time (replicate (30000, сумма (unlist (w)^2))) пользовательская система истекло 2.81 0.41 3.22 – Adam12344
@ Adam12344 - Я не могу воспроизвести эти результаты. Я получаю '0.84' секунд для' vapply' и '0.07' секунд для' unlist' – thelatemail