R - 矩阵乘法 - 没有错误信号

时间:2015-12-17 16:34:23

标签: r

> x <- c(1,1) 
> m <- rbind(c(1,4),c(2,2))  
> m %*% x   # 1 
     [,1]
[1,]    5
[2,]    4
> x %*% m   # 2  
     [,1] [,2]
[1,]    3    6
> 

我可以理解第二次乘法的工作原理和原因。在数学中,1x2(1行,2列)矩阵可以乘以2x2矩阵。

但是为什么第一个工作起作用,为什么它根本不产生错误或警告?在数学中,2x2矩阵不能乘以1x2向量/矩阵。

请注意,如果我在下面初始化x,如果我然后将m乘以x,我得到的结果与上面第一个例子相同。

> x <- cbind(c(1,1));
> x
     [,1]
[1,]    1
[2,]    1
> m %*% x   #  3  
     [,1]
[1,]    5
[2,]    4

所以我认为第三个例子是正确的做法 那么为什么第一个例子没有错误或警告就能正常工作?

1 个答案:

答案 0 :(得分:1)

直接来自文档 HEAD~3 / \ ... - HEAD~5 - HEAD~4 HEAD~2 - HEAD~1 - HEAD \ / HEAD~2^2

matmult {base}

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

所以以下内容相同(忽略属性):

?matmult

并以同样的方式:

x %*% m
t(x) %*% m 
rbind(x) %*% m 

但是m %*% x m %*% t(t(x)) m %*% cbind(x) m %*% t(x)会给您一个错误,因为t(t(x)) %*% m会返回t(),而且维度现在不兼容。这也说明了矢量被更好地解释为列而不是行向量。