在R中乘以两个矩阵

时间:2012-03-27 16:51:26

标签: r matrix

我有2个矩阵。

第一个: [1,2,3]

和第二个:

[3,1,2
 2,1,3
 3,2,1]

我正在寻找一种方法来增加它们。

结果应该是:[11, 13, 10]

在R中,mat1%*%mat2不起作用。

3 个答案:

答案 0 :(得分:10)

您需要转置第二个矩阵才能获得所需的结果:

> v1 <- c(1,2,3)
> v2 <- matrix(c(3,1,2,2,1,3,3,2,1), ncol = 3, byrow = TRUE)
> v1 %*% t(v2)
     [,1] [,2] [,3]
[1,]   11   13   10

或者可能更快(参见?crossprod)如果真正的问题更大:

> tcrossprod(v1, v2)
     [,1] [,2] [,3]
[1,]   11   13   10

答案 1 :(得分:1)

mat1%%mat2 Actuall y有效,这给[16 9 11] 但你想要mat1%%t(mat2)。这意味着转置第二个矩阵,然后你可以得到[11 13 10]

RCODE:

mat1 = matrix(c(1,2,3),nrow=1,ncol=3,byrow=TRUE)
mat2 = matrix(c(3,1,2,2,1,3,3,2,1), nrow=3,ncol=3,byrow=TRUE)
print(mat1)
print(mat2 )
#matrix Multiplication
print(mat1 %*% mat2 )
# matrix multiply with second matrix with transpose
# Note of using  function t()
print(mat1 %*% t(mat2 ))

答案 2 :(得分:0)

很难说这里最好的答案是什么,因为问题中的符号不​​在R中,它在matlab中。在给出混合符号的情况下,提问者是否想要多个向量,1行矩阵或1列矩阵很难判断。

这个问题的另一个答案就是简单地改变乘法的顺序。

v1 <- c(1,2,3)
v2 <- matrix(c(3,1,2,2,1,3,3,2,1), ncol = 3, byrow = TRUE)
v2 %*% v1

这产生的答案是单个列而不是单个行矩阵。