我在大学教数学和编程(与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完全不同)。
答案 0 :(得分:6)
?%*%
给出了逻辑:
将两个矩阵相乘,如果它们是一致的。如果一个论点 是一个向量,它将被提升为行或列矩阵 使两个论点一致。如果两者都是矢量它 将返回内积(作为矩阵)。
如果它们都是载体(第一个例子),那么你就得到了内在的产品。如果你在其中放置t( )
,向量将被转换为列矩阵,向量实际上是一个行矩阵,因此适用于一致的规则。
同样,“+”的帮助页面表示它会将参数转换为向量 - 并对结果的“形状”给出一些指导。