首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中多个矩阵的平均计算

R中多个矩阵的平均计算
EN

Stack Overflow用户
提问于 2014-09-24 09:04:55
回答 3查看 10.1K关注 0票数 9

如何有效地计算多个同维矩阵的均值?

如果A,B是2x2矩阵,

代码语言:javascript
复制
A
2  3
4  5

B
6  7
8  9

平均(A,B)应给予

代码语言:javascript
复制
4  5
6  7

一般的方法是做矩阵的(A +B+.)/num。(并显式处理NA值)

还有没有其他优雅的方法或库(在na.rm的支持下)这样做呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-24 09:39:21

将它们组合成一个数组并使用apply

代码语言:javascript
复制
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

代码语言:javascript
复制
colMeans(aperm(Y, c(3, 1, 2)), na.rm = TRUE)
#     [,1] [,2]
#[1,]    4    5
#[2,]    6    7
票数 14
EN

Stack Overflow用户

发布于 2019-02-16 23:12:01

更新:任何想要基本-R的人都会想要Reduce (请在下面上传@thelatemail ):

代码语言:javascript
复制
Reduce(`+`, x) / length(x)

原版:

我认为现在有一个更好的解决方案,多亏了purrr::reduce

代码语言:javascript
复制
require(purrr)
x = list(volcano+10, volcano-15, volcano-5)
v = reduce(x, `+`) / length(x)
image(v)

票数 3
EN

Stack Overflow用户

发布于 2021-06-15 18:27:30

如果希望您的结果是具有相同列名和行名的矩阵,则可以创建一个函数将矩阵列表传递给。您还可以将应用的函数从mean更改为sd或任何其他函数。

代码语言:javascript
复制
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)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26018216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档