我有一个看起来像这样的矩阵
raw<- c(1,2,3,4,5,6,7,8,9)
mat<- matrix(raw,ncol = 3, nrow = 3)
来找我
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
加上矢量或列表
vector<-c(1,2,3)
我需要做的是将每一行乘以相应的向量条目 即1 * 1,4 * 2,7 * 3等。
我的最终目标是计算行和向量的加权平均值。
我尝试使用
apply(c(mat,vector),1,prod)
我想知道它是否可以立即以优雅的方式完成,或者我如何正确计算行*矢量产品。
感谢
答案 0 :(得分:3)
我们可以使用sweep
在mat
列上应用产品功能:
sweep(mat, 2, vector, '*')
# [,1] [,2] [,3]
#[1,] 1 8 21
#[2,] 2 10 24
#[3,] 3 12 27
答案 1 :(得分:2)
如果您只想进行问题中的操作,可以
mat * rep(vector, each=3) # or
mat * rep(vector, each=nrow(mat)) # or
mat * matrix(vector, nrow(mat), ncol(mat), byrow=TRUE)
在我读过的评论中,您想要计算结果矩阵的行方向。所以你可以这样做:
rowMeans(mat*rep(vector, each=nrow(mat))) # or:
apply(mat, 1, weighted.mean, w=vector)*mean(vector) # both steps together
通常,函数rowMeans()
比其他计算更快。