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

5 r matrix

假设我们有以下内容:

x <- matrix(1:9, nrow=3)
y <- c(1,2,3)
x%*%y
y%*%x
Run Code Online (Sandbox Code Playgroud)

为什么矩阵乘法不是未定义的?我们知道这x是一个3 x 3矩阵,y是1 x 3矩阵.所以x %*% y不应该定义,y %*% x应该是1 x 3矩阵.

Mac*_*cro 7

幸运的是(或不幸,视情况而定)许多[R运营商(在默认状态)的过载和做各种"引擎盖下"的东西-在这个例子中,默认的功能%*%R自动强制转换y到矩阵,其尺寸将工作.当你输入

x %*% y 
Run Code Online (Sandbox Code Playgroud)

y当你输入时,它会产生一个3 x 1的矩阵

y %*% x 
Run Code Online (Sandbox Code Playgroud)

它制作y1 x 3矩阵.

尝试将它们与您键入时进行比较

x %*% as.matrix(y) 
Run Code Online (Sandbox Code Playgroud)

t(as.matrix(y)) %*% x
Run Code Online (Sandbox Code Playgroud)

分别

  • 我投票"不幸".我的经验是,R中的隐式*强制经常导致模糊,难以检测和难以调试的行为,而*显式*强制设施使他们能够做出"错误"的事情令人抓狂!:-)尽管存在许多不同的缺陷,但总的来说,我仍然喜欢R并定期使用它. (5认同)
  • 为"不幸"+1.已经有很多统计数据包试图为用户进行思考...... (2认同)