首页 > 解决方案 > 如何使用另一个矩阵的列(或行)计算矩阵的每一列(或行)的加权平均值?

问题描述

我有两个相同大小的矩阵:m看起来w如下:

set.seed(5)
m <- matrix(rexp(90), nrow = 3 , ncol = 3)

set.seed(10)
w <- matrix(rexp(90), nrow = 3 , ncol = 3)

我想计算用作权重的加权m平均值w。更准确地说,我想对m使用相同行(或列)w作为权重的每一行(或列)执行此操作。结果将理想地存储在向量中。例如:

w_mean_col <- c(weighted.mean(m[,1] , w[,1]) ,
            weighted.mean(m[,2] , w[,2]) ,
            weighted.mean(m[,3] , w[,3]) )

对于列,并且:

w_mean_row <- c(weighted.mean(m[1,] , w[1,]) ,
                weighted.mean(m[2,] , w[2,]) ,
                weighted.mean(m[3,] , w[3,]) ) 

处理非常大的矩阵时,该代码非常不切实际。会有更好的代码自动执行此操作吗?

标签: rmatrix

解决方案


你可以简单地做

colSums(m*w)/colSums(w)  ## columns
# [1] 0.2519816 0.4546775 0.7812545
rowSums(m*w)/rowSums(w)  ## rows
# [1] 0.2147437 0.5273465 1.0559481

这应该是最快的。

或者,如果您坚持weighted.mean()使用mapply.

mapply(weighted.mean, as.data.frame(m), as.data.frame(w), USE.NAMES=F)  ## columns
# [1] 0.2519816 0.4546775 0.7812545
mapply(weighted.mean, as.data.frame(t(m)), as.data.frame(t(w)), USE.NAMES=F)  ## rows
# [1] 0.2147437 0.5273465 1.0559481

推荐阅读