Next: , Previous: Matrix facilities, Up: Matrix facilities



5.7.1 矩阵相乘

操作符 %*% 用于矩阵相乘。 n × 1 或者 1 × n 矩阵在情况允许的时候 可以作为一个长度为 n 的向量处理。 反之,向量在矩阵相乘表达式中出现时可能 会被自动转换成与矩阵对应 的行或者列向量(有时候,会比较含糊 ,后面会有所论述)。

如果 AB 大小一样的方阵, 那么

     > A * B

将是一个对应元素乘积的矩阵,并且

     > A %*% B

同样是一个矩阵积。如果 x 是一个向量,那么

     > x %*% A %*% x

一个二次型(quadratic form)1

函数 crossprod() 可以完成“矢积”(crossproduct)运算,也就是说 crossprod(X, y)t(X) %*% y 等价,但是 在运算上更为高效。如果 crossprod() 第二个参数忽略了,它将默认和第一个参数一样。

函数 diag() 的含义依赖于它的参数。当 v 是一个向量时, diag(v)返回以该向量元素为对角元素的 对角矩阵。当 M 是一个矩阵时,diag(M) 返回M的对角元素。 这和 Matlabdiag() 的用法完全一致。 不过有点混乱的是,如果 k 是单个值 2, 那么 diag(k) 的结果就是 k × k 的方阵!


Footnotes

[1] 注意 x %*% x 就不明确,因为 既可表示 x'x 也可表示 x x',其中 x 是 列形式。在这种情况下,小矩阵好像比较符合上面的解释, 因此标量 x'x 是 结果(译者注:这里我也有点困惑,只是字面上翻译了)。矩阵 x x' 可以通过 cbind(x) %*% x 或者 x %*% rbind(x) 计算因为 rbind() 或者 cbind() 的结果都是矩阵。但是,计算 x'x 和 x x' 最好的办法是crossprod(x) 或者 x %o% x

[2] 译者注:正整数和小数都可以,对于正实数会自动去掉小数部分