矩阵与向量相乘

26

我有以下问题:

myvec <- c(1:3)

mymat <- as.matrix(cbind(a = 6:15, b = 16:25, c= 26:35))
mymat
       a  b  c
 [1,]  6 16 26
 [2,]  7 17 27
 [3,]  8 18 28
 [4,]  9 19 29
 [5,] 10 20 30
 [6,] 11 21 31
 [7,] 12 22 32
 [8,] 13 23 33
 [9,] 14 24 34
[10,] 15 25 35

我想将mymat与myvec相乘并构建一个新向量,使其具有以下特点:

sum(6*1, 16*2, 26*3) 
sum(7*1, 17*2, 27*3)

....................
sum(15*1, 25*2, 35*3)

抱歉,这是一个简单的问题,我不知道答案...

编辑:已更正拼写错误

3个回答

56

R中的%*%运算符用于执行矩阵乘法:

> mymat %*% myvec
      [,1]
 [1,]  116
 [2,]  122
 ...
[10,]  170

2
一种替代的,但较长的方法可能是这样的:
rowSums(t(apply(mymat, 1, function(x) myvec*x)),na.rm=T)

这是我发现的唯一可以忽略矩阵内NA值的方法。


1

矩阵是按列主序排列的向量:

 colSums(  t(mymat) * myvec )  

(希望这次读对了问题后)


为什么整个表达式周围要加上 c( )? - thelatemail
也许不需要?这个想法是为了最终以向量的形式呈现。但这个想法似乎过于谨慎了。我会放弃它。 - IRTFM
如果矩阵以列为主序存储,则在进行逐行乘法之前需要先对其进行转置。colSums(t(mymat) * myvec) - Calimo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接