如何有效地计算多个同维矩阵的均值?
如果A,B是2x2矩阵,
A
2 3
4 5
B
6 7
8 9平均(A,B)应给予
4 5
6 7一般的方法是做矩阵的(A +B+.)/num。(并显式处理NA值)
还有没有其他优雅的方法或库(在na.rm的支持下)这样做呢?
发布于 2014-09-24 09:39:21
将它们组合成一个数组并使用apply
A <- matrix(c(2,4,3,5), 2)
B <- matrix(c(6,8,7,9), 2)
X <- list(A, B)
Y <- do.call(cbind, X)
Y <- array(Y, dim=c(dim(X[[1]]), length(X)))
apply(Y, c(1, 2), mean, na.rm = TRUE)
# [,1] [,2]
#[1,] 4 5
#[2,] 6 7如果apply不够高效,则可以使用colMeans (提供NA处理)和aperm
colMeans(aperm(Y, c(3, 1, 2)), na.rm = TRUE)
# [,1] [,2]
#[1,] 4 5
#[2,] 6 7发布于 2019-02-16 23:12:01
更新:任何想要基本-R的人都会想要Reduce (请在下面上传@thelatemail ):
Reduce(`+`, x) / length(x)原版:
我认为现在有一个更好的解决方案,多亏了purrr::reduce。
require(purrr)
x = list(volcano+10, volcano-15, volcano-5)
v = reduce(x, `+`) / length(x)
image(v)

发布于 2021-06-15 18:27:30
如果希望您的结果是具有相同列名和行名的矩阵,则可以创建一个函数将矩阵列表传递给。您还可以将应用的函数从mean更改为sd或任何其他函数。
reduceApplyListOfArrays<- function(x){
y<-apply(array(unlist(x), c(dim(x[[1]]), dim(x[[2]]), length(x))),
c(1,2), mean)
colnames(y)<-colnames(x[[1]])
rownames(y)<-rownames(x[[1]])
return(y)
}https://stackoverflow.com/questions/26018216
复制相似问题