gpt4 book ai didi

r - 如何使用另一个矩阵的列(或行)计算矩阵的每一列(或行)的加权平均值?

转载 作者:行者123 更新时间:2023-12-04 15:03:54 24 4
gpt4 key购买 nike

我有两个大小相同的矩阵:mw,如下所示:

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

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

我想使用 w 作为权重来计算 m 的加权均值。更准确地说,我想对 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,]) )

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

最佳答案

你可以简单地做

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

关于r - 如何使用另一个矩阵的列(或行)计算矩阵的每一列(或行)的加权平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66496406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com