2

在 R 中,我想将 1x3 向量乘以 3x3 矩阵以生成 1x3 向量。然而 R 返回一个矩阵:

> v = c(1,1,0)
> m = matrix(c(1,2,1,3,1,1,2,2,1),nrow=3,ncol=3,byrow=T)
> v*m
     [,1] [,2] [,3]
[1,]    1    2    1
[2,]    3    1    1
[3,]    0    0    0

正确的输出应该是向量,而不是矩阵

4

3 回答 3

5

如果有疑问,请尝试帮助系统,例如help("*")help("Arithmetic")。您只是使用了错误的运算符。

R> v <- c(1,1,0)
R> m <- matrix(c(1,2,1,3,1,1,2,2,1),nrow=3,ncol=3,byrow=T)
R> dim(m)
[1] 3 3
R> dim(v)
NULL
R> dim(as.vector(v))
NULL
R> dim(as.matrix(v, ncol=1))
[1] 3 1
R> 
R> m %*% as.matrix(v, ncol=1)
     [,1]
[1,]    3
[2,]    4
[3,]    4
R> 

请注意,我们必须先v变成一个适当的向量。你没有说是 1x3 还是 3x1。但幸运的是 R 很慷慨:

R> v %*% m
     [,1] [,2] [,3]
[1,]    4    3    2
R> m %*% v
     [,1]
[1,]    3
[2,]    4
[3,]    4
R> 
于 2013-04-22T16:16:26.690 回答
3

在这种情况下有用的功能是crossprodtcrossprod

> tcrossprod(v, m)
     [,1] [,2] [,3]
[1,]    3    4    4

有关详细信息,请参见?crossprod?tcrossprod

于 2013-04-22T16:22:16.463 回答
2

你在寻找

as.vector(v %*% m)

?

这里的文档matmult

 Multiplies two matrices, if they are conformable.  If one argument
 is a vector, it will be promoted to either a row or column matrix
 to make the two arguments conformable.  If both are vectors it
 will return the inner product (as a matrix).
于 2013-04-22T16:15:16.290 回答