R中的矢量运算不一致?

von*_*njd 5 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
Run Code Online (Sandbox Code Playgroud)

我认为这里存在一些不一致的地方:要么我丢失了某些东西,要么R在转置或不转换时得到的结果似乎是相当随意的.

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

Gav*_*lly 6

?%*% 给出了逻辑:

如果它们是一致的,则将两个矩阵相乘.如果一个参数是一个向量,它将被提升为行或列矩阵,以使两个参数一致.如果两者都是向量,它将返回内积(作为矩阵).

如果它们都是矢量(第一个例子),那么你就得到了内在的产品.如果你t( )在那里放置一个,那么向量将被转换成一个列矩阵,一个向量实际上是一个行矩阵,所以适用的是一致的一致规则.

类似地,"+"的帮助页面表示它会将参数转换为向量 - 并对结果的"形状"给出一些指导.