将矩阵的每一行乘以r中的向量的好方法

时间:2013-07-18 15:32:36

标签: r

我知道这是一个非常基本的问题,对不起。

我想用矩阵乘以矩阵的每一行。所以我有:

mat=matrix(1,2,4)
vec=c(1,2,3,4)

#works but ugly:
new.mat=mat
for(i in 1:nrow(mat)){
  new.mat[i,]=mat[i,]*vec
}

我以为我找到了'应用'的答案,但我无法以同样的方式工作。

4 个答案:

答案 0 :(得分:12)

我认为这就是你要找的......

t( t(mat) * vec )
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    1    2    3    4

*与R中的大多数其他运算符一样是向量化的。 t是必要的,因为R将按列进行循环。 apply解决方案是:

t( apply( mat , 1 , `*` , vec ) )
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    1    2    3    4

答案 1 :(得分:3)

使用apply

> t(apply(mat,1 , function(x) x*vec))
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    1    2    3    4

答案 2 :(得分:2)

我不得不说最优雅的方式是:

mat=matrix(1,2,4)
vec=1:4
new.mat=t(vec*t(mat))

答案 3 :(得分:2)

我更喜欢sweep,虽然我认为它稍微慢一些:

sweep(mat,MARGIN=2,vec,"*")

MARGIN=2指定每个(边距2)应乘以vec的相应元素。