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
> 

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

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

请注意,如果我像下面这样初始化x,并且如果我然后将m乘以x,我得到与上面第一个例子中相同的结果.

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

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

最佳答案 直接来自文档,?matmult:

matmult {base}

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

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

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()将返回一个矩阵,现在维度不兼容.这也说明了矢量被更好地解释为列而不是行向量.

点赞