我有2个矩阵。
第一个:
[1,2,3]
和第二个:
[3,1,2
2,1,3
3,2,1]
我正在寻找一种方法来增加它们。
结果应该是:[11, 13, 10]
在R中,mat1%*%mat2
不起作用。
答案 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
这产生的答案是单个列而不是单个行矩阵。