R中的矩阵运算
时间:2020-02-23 14:43:51 来源:igfitidea点击:
R提供了广泛的矩阵处理功能。
除了前面讨论的基本操作之外,还有一些高级矩阵函数可以简化统计编程工作。
本教程将通过示例说明此类功能。
R中的矩阵转置
矩阵A的转置只是行和列互换的另一个矩阵。
可以使用R中的t(A)来计算。
#Define a rectangular matrix > rectmatrix<-matrix(c(2,3,4,5,6,7),nrow=2,ncol=3) > rectmatrix [,1] [,2] [,3] [1,] 2 4 6 [2,] 3 5 7 > rectmatrix [,1] [,2] [,3] [1,] 2 4 6 [2,] 3 5 7 > t(rectmatrix) [,1] [,2] [1,] 2 3 [2,] 4 5 [3,] 6 7
Transpose Matrix In R
R中矩阵的对角线
R具有" diag()"功能,可根据矢量创建对角矩阵。
相同的函数也可用于沿矩阵的主对角线检索元素。
即使对于非平方矩阵,diag()函数也会从元素[1,1],[2,2]等开始返回对角线,直到无法检索到此类元素。
#diag(x) where x is a scalar - returns an identity matrix of dimension x by #x > diagmatrix<-diag(4) > diagmatrix [,1] [,2] [,3] [,4] [1,] 1 0 0 0 [2,] 0 1 0 0 [3,] 0 0 1 0 [4,] 0 0 0 1 #diag(x,y,z) - returns a matrix of size y by z with element x along its #diagonal > diagmatrix1<-diag(4,2,2) > diagmatrix1 [,1] [,2] [1,] 4 0 [2,] 0 4 #Define a rectangular matrix > rectmatrix<-matrix(c(2,3,4,5,6,7),nrow=2,ncol=3) > rectmatrix [,1] [,2] [,3] [1,] 2 4 6 [2,] 3 5 7 #Extract its diagonal - returns [1,1] and [2,2] elements of rectmatrix > diag(rectmatrix) [1] 2 5
R中的跨产品和外部产品矩阵运算
前面我们已经看到了逐元素乘法和矩阵乘法。
矩阵还具有R支持的另外两种产品。
外部乘积:用最简单的术语来说,外部乘积是在两个向量v1和v2上定义的,从而形成一个矩阵,该矩阵由v1的每个元素乘以v2的每个元素组成。
如果v1的长度为m且v2的长度为n,则外部乘积是m乘n的矩阵。
有时也称为张量积。
该概念也可以推广到矩阵,在这种情况下称为Kroeckner乘积。
为此的R运算符是%o%
。叉积:两个向量A和B的叉积的结果是另一个与A和B都正交的向量C。
尽管其直觉并不明显,但叉积在数学,物理学和数学中都有许多应用。
统计。
这可以使用R中的crossprod()
函数来完成。
让我们看一些例子来说明这些。
#Calculate the vector outerproducts using R > vec1 <- c(2,4,6) > vec2 <-c(5,2,2,2,8) > op <- vec1%o%vec2 > op [,1] [,2] [,3] [,4] [,5] [1,] 10 4 4 4 16 [2,] 20 8 8 8 32 [3,] 30 12 12 12 48 #Get the crossproduct of a matrix with itself > x [,1] [,2] [,3] [1,] 3 2 8 [2,] 4 6 9 [3,] 5 7 11 > y [,1] [,2] [,3] [1,] 3 7 1 [2,] 2 8 54 [3,] 6 22 10 > crossprod(x) [,1] [,2] [,3] [1,] 50 65 115 [2,] 65 89 147 [3,] 115 147 266 #Crossproduct of two vectors x and y > crossprod(x,y) [,1] [,2] [,3] [1,] 47 163 269 [2,] 60 216 396 [3,] 108 370 604
R中的列和行矩阵运算
R提供了一些方便的函数,用于组合矩阵并生成总和以及行和列的均值。
以下示例列出了这些功能。
cbind():按列组合两个或者多个矩阵或者数据帧以返回新的矩阵/数据帧。
> x [,1] [,2] [,3] [1,] 3 2 8 [2,] 4 6 9 [3,] 5 7 11 > y [,1] [,2] [,3] [1,] 3 7 1 [2,] 2 8 54 [3,] 6 22 10 > cbind(x,y) [,1] [,2] [,3] [,4] [,5] [,6] [1,] 3 2 8 3 7 1 [2,] 4 6 9 2 8 54 [3,] 5 7 11 6 22 10 >
rbind():类似于上述功能,按行组合两个以上的矩阵或者数据帧。
> x [,1] [,2] [,3] [1,] 3 2 8 [2,] 4 6 9 [3,] 5 7 11 > y [,1] [,2] [,3] [1,] 3 7 1 [2,] 2 8 54 [3,] 6 22 10 > rbind(x,y) [,1] [,2] [,3] [1,] 3 2 8 [2,] 4 6 9 [3,] 5 7 11 [4,] 3 7 1 [5,] 2 8 54 [6,] 6 22 10
colSums()和colMeans():为矩阵或者数据帧按列生成元素的总和和均值。
> x [,1] [,2] [,3] [1,] 3 2 8 [2,] 4 6 9 [3,] 5 7 11 > colSums(x) [1] 12 15 28 > colMeans(x) [1] 4.000000 5.000000 9.333333
rowSums()和rowMeans():为矩阵或者数据帧逐行生成元素的总和和均值。
#Define x and y matrices > x<-matrix(c(3,4,5,2,6,7,8,9,11),ncol=3,nrow=3) > y<-matrix(c(3,2,6,7,8,22,1,54,10),ncol=3,nrow=3) > x [,1] [,2] [,3] [1,] 3 2 8 [2,] 4 6 9 [3,] 5 7 11 > rowSums(x) [1] 13 19 23 > rowMeans(x) [1] 4.333333 6.333333 7.666667