【发布时间】:2014-04-04 12:41:31
【问题描述】:
我在大学教授数学和编程(使用 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完全不一样)。
【问题讨论】:
-
你为什么用
Matlab标记这个? -
我同意 Matlab 的规则更加一致。 R 尝试做一些便于交互式分析的事情(将向量提升为行或列矩阵似乎合适,删除维度)。正如@GavinKelly 下面的回答所指出的那样,它的行为是明确定义的,但这并不意味着它有时不会令人困惑。
标签: r vector matrix-multiplication