R语言矩阵与数组2021.1.24
总结一句,放在开头:R语言中的向量更像是数组,而数组更像是矩阵 。
矩阵
矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合。向量是一维的,而矩阵是二维的,需要有行和列。在R软件中,矩阵是有维数的向量,这里的短阵元素可以是数值型,字符型或者逻辑型,但是每个元素必须都拥有相同的模式,这个和向量一致。
1、m<-matrix(向量名,nrow=行数,ncol=列数): 输出矩阵
例如输入:
x<-1:20
m<-matrix(x,nrow=2,ncol=10)
输出:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 3 5 7 9 11 13 15 17 19
[2,] 2 4 6 8 10 12 14 16 18 20
2、m<-matrix(向量名,数值,byrow=T/F) :将数据分为x行,并且按行或按列排列元素(T为按行,F为按列)
例如输入:
m<-matrix(1:20,4,byrow=T)
输出:
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
[3,] 11 12 13 14 15
[4,] 16 17 18 19 20
例如输入:
m<-matrix(1:20,4,byrow=F)
输出:
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
矩阵行列命名
用list列表来给矩阵命名行列
例子:
rnames<-c("R1","R2","R3","R4")
cnames<-c("C1","C2","C3","C4","C5")
dimnames(m)<-list(rnames,cnames)
输出:
C1 C2 C3 C4 C5
R1 1 5 9 13 17
R2 2 6 10 14 18
R3 3 7 11 15 19
R4 4 8 12 16 20
数组
创建三维数组
输入:
dim1<-c("A1","A2")
dim2<-c("B1","B2","B3")
dim3<-c("C1","C2","C3","C4") #定义每一维度名称
z<-array(1:24,c(2,3,4),dimnames<-list(dim1,dim2,dim3)) #创建“长宽高为2,3,4”的三维数组
输出:
, , C1
B1 B2 B3
A1 1 3 5
A2 2 4 6
, , C2
B1 B2 B3
A1 7 9 11
A2 8 10 12
, , C3
B1 B2 B3
A1 13 15 17
A2 14 16 18
, , C4
B1 B2 B3
A1 19 21 23
A2 20 22 24
矩阵索引
1.访问元素:矩阵名[行下标,列下标],例如m[1,2],访问第一行,第二列元素。
2.访问某行所有元素:矩阵名[行下标,]/矩阵名[,列下标],例如:m[,3],访问第三列所有元素。
3.访问指定行和列元素:矩阵名[c(开始行:结束行),c(开始列:结束列)]例如:m[c(2:4),(1:3)],访问从第二行到第四行,第一列到第三列所有元素。
4.去除某一行访问某列元素:矩阵名[-行下标,列下标],例如:m[-1,2]取出去除了第一行的第二列其他元素。
5.通过行名和列命索引:矩阵名["行名","列名"], 例如:m["R1","C2"]取出行名为R1,列名为C2的元素,注意行名和列名要加引号
矩阵运算
四则运算
矩阵与矩阵运算要求维度一致,矩阵与值也可以进行四则运算。
只对矩阵的某一行或者某一列进行运算:
rowSums(m):计算矩阵每一行的和
colSums(m):计算矩阵每一列的和
rowMeans(m):计算矩阵每一行的平均值
colMeans(m):计算矩阵每一列的和平均值
矩阵乘法(分为内积和外积)
n*m:外积,矩阵对应元素乘积
n%*%m:内积,矩阵的积对应行列相乘再相加
其他运算
diag(矩阵名):输出方阵的对角线元素
t(函数名):输出转置矩阵,并且转换排序规则