[英]Inconsistent vector operations in R?
我在大学教数学和编程(与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完全不同)。
?%*%
给出了逻辑:
如果它们是一致的,则将两个矩阵相乘。 如果一个参数是一个向量,它将被提升为行或列矩阵,以使两个参数一致。 如果两者都是向量,它将返回内积(作为矩阵)。
如果它们都是矢量(第一个例子),那么你就得到了内在的产品。 如果你在其中放置一个t( )
,向量将被转换为列矩阵,并且向量实际上是行矩阵,因此适用的是一致的一致规则。
类似地,“+”的帮助页面表示它会将参数转换为向量 - 并对结果的“形状”给出一些指导。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.