将一列矩阵与固定因子相乘

时间:2017-02-15 15:56:09

标签: r matrix matrix-multiplication multiplication

这可能是一个非常微不足道的问题,但我还没有找到一个可行的解决方案。这里有一个类似的问题,但它没有得到可行的答案,所以我很感激任何建议。

我有一个简单的3x3矩阵,想要将第二列乘以一个固定因子。 例如:

m<-matrix(rep(c(1,2,3),1*3),nrow=3)
m
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    2    2
[3,]    3    3    3

如果我尝试m[,2]*5,它会给我[1] 5 10 15

我想要的结果如下:

     [,1] [,2] [,3]
[1,]    1    5    1
[2,]    2    10   2
[3,]    3    15   3

它可能会那么困难,不是吗?

2 个答案:

答案 0 :(得分:1)

只需像m[,2] <- m[,2]*5

那样分配

答案 1 :(得分:0)

我认为比单列分配更通用的方法是sweep,其中包含向量c(1,5,1)

 sweep(m, 2, c(1,5,1), "*")
     [,1] [,2] [,3]
[1,]    1    5    1
[2,]    2   10    2
[3,]    3   15    3

然后,您可以将单个矢量应用于矩阵,而不需要重复单列操作:

sweep(m, 2, c(2,5,10), "*")
     [,1] [,2] [,3]
[1,]    2    5   10
[2,]    4   10   20
[3,]    6   15   30

@ akrun在评论m*c(1, 5, 1)[col(m)]中的解决方案似乎有效地做到了这一点,但我很难理解它是如何工作的。它似乎取决于操作的优先级,如果它已被写成,我会更容易理解:c(1, 5, 1)[col(m)]*m。这样可以更清楚地计算向量c(1, 5, 1)[col(m)],而不是m*c(2,5,10)提取[col(m)]