R中的矢量运算不一致?

时间:2014-04-04 12:41:32

标签: r vector matrix-multiplication

我在大学教数学和编程(与R),我是一个良好和一致的符号的忠实粉丝。请看一下R中的以下简单向量运算:

> v1 <- c(1,2,3)
> v2 <- c(4,5,6)
> v1 %*% v2
     [,1]
[1,]   32
> t(v1) %*% v2
     [,1]
[1,]   32
> v1 %*% t(v2)
     [,1] [,2] [,3]
[1,]    4    5    6
[2,]    8   10   12
[3,]   12   15   18
> t(v1) %*% t(v2)
Error in t(v1) %*% t(v2) : non-conformable arguments
> v1 + v2
[1] 5 7 9
> v1 + t(v2)
     [,1] [,2] [,3]
[1,]    5    7    9
> t(v1) + t(v2)
     [,1] [,2] [,3]
[1,]    5    7    9

我认为这里存在一些不一致的地方:或者我错过了某些内容,或者R在你转置或不转换时得到的结果似乎是相当随意的。

这里的基本逻辑是什么(顺便说一下,它似乎与Matlab完全不同)。

1 个答案:

答案 0 :(得分:6)

?%*%给出了逻辑:

将两个矩阵相乘,如果它们是一致的。如果一个论点 是一个向量,它将被提升为行或列矩阵 使两个论点一致。如果两者都是矢量它 将返回内积(作为矩阵)。

如果它们都是载体(第一个例子),那么你就得到了内在的产品。如果你在其中放置t( ),向量将被转换为列矩阵,向量实际上是一个行矩阵,因此适用于一致的规则。

同样,“+”的帮助页面表示它会将参数转换为向量 - 并对结果的“形状”给出一些指导。