R 矩阵乘法-非一致矩阵的松散定义

R 矩阵乘法-非一致矩阵的松散定义,r,matrix,R,Matrix,假设我们有以下情况: x <- matrix(1:9, nrow=3) y <- c(1,2,3) x%*%y y%*%x x幸运的是(或者不幸的是,根据情况而定),许多R运算符(在其默认状态下)被重载,并在“引擎盖下”执行各种操作。在本例中,R中的%*%的默认功能自动将y强制到维度有效的矩阵。你打字的时候 x %*% y y %*% x x %*% as.matrix(y) 它使y成为一个3 x 1的矩阵,当您键入 x %*% y y %*% x x %*%

假设我们有以下情况:

x <- matrix(1:9, nrow=3)
y <- c(1,2,3)
x%*%y
y%*%x
x幸运的是(或者不幸的是,根据情况而定),许多R运算符(在其默认状态下)被重载,并在“引擎盖下”执行各种操作。在本例中,
R
中的
%*%
的默认功能自动将
y
强制到维度有效的矩阵。你打字的时候

x %*% y 
y %*% x 
x %*% as.matrix(y) 
它使
y
成为一个3 x 1的矩阵,当您键入

x %*% y 
y %*% x 
x %*% as.matrix(y) 
它使
y
1 x 3矩阵

试着把这些和你打字的时候比较一下

x %*% y 
y %*% x 
x %*% as.matrix(y) 


答案分别在
帮助(“%*%”)的第一部分中找到。我投票赞成“不幸”。我的经验是,R中的隐式强制通常会导致模糊、难以检测和难以调试的行为,而显式强制工具在做“错误”事情的能力方面令人恼火:-)尽管它有很多不同的缺陷,但总的来说,我仍然喜欢R并经常使用它。+1表示“不幸”。已经有很多统计软件包试图为用户做思考……如果你仍然处于一种哀鸣的心态,那么你还应该提到当你提取一列时会发生什么:
(x%*%y)[,1]
@DWin,我不确定你的意图是什么。一旦你进行了乘法运算,例如,
x%*%y
,一个新的矩阵将基于它创建,但它必须强制这样做才能使乘法工作,然后你只需像往常一样索引该矩阵。因此,
x%*%y
将a(3 x 3)乘以a(3 x 1)得到a(3 x 1),因此提取第一列只得到长度为3的向量,使用
y%*%x
得到a(1 x 3),因此第一列只是一个标量。我可能没听清你的意思……归根结底(我个人的推断)R主要是一个数据分析工具,所以矩阵运算是为DWIM设计的,其中“I”是一个统计学家。或者,Matlab的DWIM旨在将“I”作为线性代数。