矩阵
矩阵定义
矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。可通过函数matrix()
创建矩阵。一般使用格式为:
|
|
其中:
- vector包含了矩阵的元素;
- nrow和ncol用以指定行和列的维数;
- dimnames包含了可选的、以字符型向量表示的行名和列名。
- 选项 byrow 则表明矩阵应当按行填充( byrow=TRUE )还是按列填充( byrow=FALSE ),默认情况下按列填充。
创建矩阵
matrix()
此函数在默认情况下是按列进行填充,如下所示:
|
|
运行结果如下所示:
|
|
dim()
通过dim来创建,先生成向量x,接着给向量x适当的维数,此例子中给向量的维数为5行,3列:
|
|
矩阵命名
用法:Dimnames(Row_name,Col_name),给定行和列的名称,如果不需要给行或者列命名,则以NULL代替。例如:给下面的矩阵列命令:
|
|
用rownames与colnames实现
|
|
查看矩阵
查看矩阵的列/行相关信息
|
|
查看矩阵的维度
|
|
条件提取子矩阵
|
|
提取矩阵的行或列
nrow
与ncol
函数: nrow与ncol函数返回行或列的某一个数字。NCOL与NROW用于向量,即把向量作为单行的矩阵处理。 用法: nrow(x) ncol(x) NCOL(x) NROW(x) 参数: x:向量,或数据框; 值:长度为1或无的整数: 类似的有dim函数,如下所示:
|
|
矩阵的运算
矩阵相乘%*%
|
|
只有当矩阵a的列数与矩阵b的行数相等时a×b才有意义。一个m×n的矩阵a(m,n)左乘一个n×p的矩阵b(n,p),会得到一个m×p的矩阵c(m,p),满足矩阵乘法满足结合律,但不满足交换律。 运算的法则: 矩阵a的第1行的3个元素(1,2,3)分别与矩阵b第1列的3个元素(1,2,3)相乘,其和为结果为e[1,1],即e[1,1]=1×1+2×2+3×3=14; 矩阵a的第1行的3个元素(1,2,3)分别与矩阵b第2列的3个元素(4,5,6)相乘1×4+2×5+3×6=32,得到e[1,2]; 矩阵a的第2行的3个元素(4,5,6)分别与矩阵b第1列的3个元素(1,2,3)相乘4×1+5×2+6×3=32,得到e[2,1]; 矩阵a的第2行的3个元素(4,5,6)分别与矩阵b第2列的3个元素(4,5,6)相乘4×4+5×5+6×6=77,得到e[2,2].
矩阵合并
|
|
星号表示相乘
把两个矩阵中每个对应的元素相乘,例子中a与b拥有相同的维度
|
|
如果维度不同,如下所示:
|
|
增加行与列
|
|
矩阵转置t()
|
|
取对角元素diag()
若要取一个方阵的对角元素,对一个向量应用diag()
函数将产生以这个向量为对角元素的对角矩阵,对一个正整数k应用diag()
函数将产生k维单位矩阵,如下所示:
|
|
结果如下所示:
|
|
求各行与列的总和与均值rowSum()
,rowMeans()
|
|
矩阵的特征值与特征向量eigen()
矩阵A的谱分解为A=UΛU
,其中Λ是由A的特征值组成的对角矩阵,U的列为A的特征值对应的特征向量,在R中可以使用eigen()得到U和A,eigen(x,symmertic, only.values=FALSE,EISPACK=FALSE)
,其中参数symmetric项是逻辑值,是F或T,它用于指定矩阵x是否为对称矩阵,如果不指定,系统将自动检验x是否为对称矩阵,如下所示:
|
|
矩阵的求逆solve()
矩阵求逆可用函数solve(),应用sovle(A,b)运算结果可以解线性方程组Ax=b,若b缺少,则系统默认为单位矩阵,因此可以用其进行矩阵求逆,如下所示:
|
|
结果如下所示:
|
|
矩阵的特征值与特征向量eigen()
矩阵A的谱分解为$A=U\Lambda U’$,其中$\Lambda$是由$A$的特征值组成的对角矩阵,$U$的列为$A$的特征值对应的特征向量,在R中可以使用eigen()
得到$U$和$A$,此函数参数如下所示:
|
|
其中,x为矩阵,symmetric项指定矩阵x是否为对称矩阵,若不指定,系统将自动检测x是否为对称矩阵,如下所示:
|
|
结果如下所示:
|
|
矩阵的Choleskey分解
对于正定矩阵A,可对其进行Choleskey分解,即$A=P’P$,其中$P$为上三角矩阵,在R中可以用函数chol()
进行Choleskey分解,如下所示:
|
|
结果如下所示:
|
|
矩阵奇异值分解svd()
A为$m \times n$矩阵,$rank(A)=r$,可以分解为$A=UDV^T$,其中,$U’U=V’V=I$。在R中可以使用函数svd()
进行奇异值分解,如下所示:
|
|
结果如下所示:
|
|
矩阵QR分解qr()
A为$m \times n$矩阵时可以进行QR分解,$A=QR$,其中,$Q’Q=I$,在R中可以使用qr()
进行QR分解,如下所示:
|
|
结果如下所示:
|
|
矩阵kronecker积kronecker()
A为$m \times n$矩阵,B为$h \times k$矩阵,而A与B的kronecker积为一个$nh \times mk$维矩阵,在R中,使用函数kronecker()
来过计算kronecker积,如下所示:
|
|
结果如下所示:
|
|
行列式计算det()
在矩阵中,计算行列式的值可以使用函数det()
,如下所示:
|
|
计算结果如下所示:
|
|
参考资料
- 多元统计分析及R语言建模(第4版) [Multivariate Statistical Analysis and Modeling for R Language] .王斌会 著
- R数据分析之方法与案例详解.方匡南,朱建平,姜叶飞.电子工业出版社