附录E R中的矩阵运算
本书中介绍的很多函数都是操作矩阵的。对矩阵的操作已经深深地扎根于R语言中。表E-1中介绍了对解决线性代数问题非常重要的运算符和函数。在表E-1中,A
和B
是矩阵,x
和b
是向量,k
是标量。
表E-1 用于矩阵代数的R函数和运算符
运算符或函数 | 描 述 |
---|---|
+ - * / ^ | 分别是逐个元素的加、减、乘、除和幂运算 |
A %*% B | 矩阵乘法 |
A %o% B | 外积。AB' |
cbind(A, B, …) | 横向合并矩阵或向量 |
chol(A) | A 的Choleski分解。若R <- chol(A) ,那么chol(A) 包含上三角因子,即R'R=A |
colMeans(A) | 返回A 的列均值组成的向量 |
crossprod(A) | A'A |
crossprod(A, B) | A'B |
colSums(A) | 返回A 的列总和组成的向量 |
diag(A) | 返回主对角元素组成的向量 |
diag(x) | 用x 中元素作为主对角元素创建对角矩阵 |
diag(k) | 如果k 是标量,就创建k × k 的单位矩阵 |
eigen(A) | A 的特征值和特征向量。若y <- eigen(A) ,那么:
y$val 是A 的特征值;
y$vec 是A 的特征向量 |
ginv(A) | A 的Moore-Penrose广义逆(需要MASS包) |
qr(A) | A 的QR分解。若y <- qr(A) ,那么 y$qr 的上三角是分解结果,下三角是分解的信息,y$rank 是A 的秩,y$qraux 是Q的附加信息向量,y$pivot 是所使用的主元素选择策略 |
rbind(A, B, …) | 纵向合并矩阵或向量 |
rowMeans(A) | 返回A 的行均值组成的向量 |
rowSums(A) | 返回A 的行总和组成的向量 |
solve(A) | A 的逆,其中A 是方矩阵 |
solve(A, b) | 求解方程b = Ax 中的向量x |
Svd(A) | A 的奇异值分解。若y <- svd(A) ,那么y$d 是A 的奇异值组成的向量,y$u 是矩阵且每一列都是A 的左奇异向量,y$v 是矩阵且每一列都是A 的右奇异向量 |
t(A) | A 的转置 |
还有几个用户贡献的用于矩阵代数的包。matlab
包中的包装器函数和变量尽可能模拟MATLAB的函数调用。这些函数可用于将MATLAB程序和代码移植到R。还有一个将MATLAB命令转换成R命令的速查卡(http://mathesaurus.sourceforge.net/octave-r.html)。
Matrix
包中的函数使得R可以处理高密度矩阵或稀疏矩阵。可以高效的访问BLAS(Basic Linear Algebra Subroutines)、Lapack (密集矩阵)、TAUCS(稀疏矩阵)和UMFPACK(稀疏 矩阵)。
最后是matrixStats
包,其中提供了操作矩阵中行和列的方法,包括计数、求和、乘积、居中趋势(central tendency)、离散度等的计算函数。这里的每一个方法都在速度和内存效率上做了优化。