R matrix 矩阵(补充)

2019-11-22  本文已影响0人  11的雾

R matrix 矩阵 前一篇
补充:
利用矩阵matrix可以描述二维数据,与向量相似,其内部元素可以是实数、复数、字符、逻辑型数据。矩阵matrix使用两个下标来访问元素,A[i,j]表示矩阵A第i行、第j列的元素。
多维数组array可以描述多维数据。array有一个特征属性叫维数向量(dim属性),它的长度是多维数组的维数,dim内的元素则是对应维度的长度。矩阵是数组的特殊情况,它具有两个维度。
在R中,可以使用matrix函数并以向量形式输入矩阵中的全部元素,使用ncol和nrow可设置矩阵的行数和列数,从而创建一个矩阵。

> (w<-seq(1:10))
[1]  1  2  3  4  5  6  7  8  9 10
> (a<-matrix(w,nrow=5,ncol=2))
[,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

先创建一个1~10数列的向量w,然后利用matrix函数将矩阵的行数设置为5,列数设置为2,得到矩阵a。注意,矩阵a的数据是按照列填充的,而在实际工作中,数据可能更多地是按照行填充,这时只需要将参数byrow设置为TRUE即可。

> (a<-matrix(w,nrow=5,ncol=2,byrow=T))  #按行填充
[,1] [,2]
[1,]    1    2
[2,]    3    4
[3,]    5    6
[4,]    7    8
[5,]    9   10

给矩阵的行列命名有助于提高数据的可读性,可通过参数dimnames实现。

# 给行列设置名称
> (a<-matrix(w,nrow=5,ncol=2,byrow=T, dimnames=list(paste0("r",1:5),paste0("l",1:2))))
l1 l2
r1  1  2
r2  3  4
r3  5  6
r4  7  8
r5  9 10

函数cbind()把其自变量横向拼成一个大矩阵,可以想象为水平地将矩阵拼在一起,rbind()把其自变量纵向拼成一个大矩阵,可以将其想象为垂直地将矩阵拼在一起。
当函数cbind()的自变量是矩阵或看作列向量的向量时,自变量的行数应该相等。当rbind()的自变量是矩阵或看作行向量的向量时,自变量的列数应该相等。如果参与合并的自变量比其变量短,则循环不足后合并。例如:

> (x1<-rbind(c(1,2),c(3,4))) # 创建向量x1
[,1]  [,2]
[1,]    1    2
[2,]    3    4
> (x2<-10+x1)             # 创建向量x2
[,1]  [,2]
[1,]   11   12
[2,]   13   14
> (x3<-cbind(x1,x2))      # 将向量x1和x2水平(列)合并
[,1] [,2] [,3] [,4]
[1,]    1    2   11   12
[2,]    3    4   13   14
> (x4<-rbind(x1,x2))      # 将向量x1和x2垂直(行)合并
[,1]   [,2]
[1,]    1    2
[2,]    3    4
[3,]   11   12
[4,]   13   14
> cbind(1,x1)     # 当1长度小于x1时,会先自动补全为c(1,1),再与x1进行列合并
[,1]  [,2]  [,3]
[1,]    1    1    2
[2,]    1    3    4

通过函数as.vector(A)可以将矩阵转化为向量。例如:

> (A<-matrix(1:6,nrow=2))
[,1]  [,2]  [,3]
[1,]    1    3    5
[2,]    2    4    6
> as.vector(A)
[1] 1 2 3 4 5 6

可以使用colSums(列求和)、colMeans(列求平均)、rowSums(行求和)、rowMeans(行求平均)函数对矩阵的行、列求和或者求平均值,也可使用apply函数实现。

> (A <- matrix(1:16,4,4))
[,1]        [,2]   [,3]  [,4]
[1,]    1    5    9   13
[2,]    2    6   10   14
[3,]    3    7   11   15
[4,]    4    8   12   16
> colSums(A)  # 等价于 apply(A,2,sum)
[1] 10 26 42 58
> colMeans(A) # 等价于 apply(A,2,mean)
[1] 2.5 6.5 10.5 14.5
> rowSums(A)  # 等价于 apply(A,1,sum)
[1] 28 32 36 40
> rowMeans(A) # 等价于 apply(A,1,mean)
[1] 7 8 9 10

矩阵A第一列的元素是1、2、3、4,故第一列的和是1+2+3+4=10,第一列的平均值是(1+2+3+4)/4=2.5。
数组是矩阵的扩展,它把数据的维度扩展到两个以上。这意味着数组中的元素需要两个以上的索引。除此之外,数组与矩阵类似,可以使用相同的方法。与函数matrix()类似,可以通过函数array()方便地创建数组。

> (w<-array(1:30,dim=c(3,5,2)))
, , 1
[,1] [,2] [,3] [,4] [,5]
[1,]    1    4    7   10   13
[2,]    2    5    8   11   14
[3,]    3    6    9   12   15
, , 2
[,1] [,2] [,3] [,4] [,5]
[1,]   16   19   22   25   28
[2,]   17   20   23   26   29
[3,]   18   21   24   27   30

上面表示建立一个三维数据的数组,其维度是3×5×2。在结果中会依次展示2个3行5列的矩阵。

上一篇 下一篇

猜你喜欢

热点阅读