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