1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
# R内置数据集中的矩阵
iris3
state.x77
# 创建矩阵
x<-c(1:20)
matrix(x,nrow=4,ncol=5)
matrix(1:20,4,5)# 先是“行”,后是“列”
# [,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
# 默认是按列排列,可以增添byrow=T来按行排列
matrix(c(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,5)
rnames<-c("R1","R2","R3","R4")
cnames<-c("C1","C2","C3","C4","C5")
dimnames(m)<-list(rnames,cnames)
m
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
# dim()表示向量维数,也可来创造矩阵
x<-1:10
dim(x)<-c(2,5)
x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
# R中的数组是多维矩阵
x<-1:20
dim(x)<-c(2,5,2)
x
, , 1
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
, , 2
[,1] [,2] [,3] [,4] [,5]
[1,] 11 13 15 17 19
[2,] 12 14 16 18 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))
z
, , 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
# 查找元素
x<-matrix(1:20,4,5,byrow=T)
x[1,2] # 查找为2
x[1,c(2,3,4)] # 访问多个元素
x[c(2,3),c(2,3)] # 访问子集
x[2,] # 访问第二行
x[,2] # 访问第二列
x[-1,2] # 负数索引,去除第一行后输出第二列
# 也可以通过名称访问
state.x77
state.x77["Alabama",]
# 矩阵的运算就是每个元素的运算
colSums() # 分别计算矩阵每一列和
rowSums() # 分别计算矩阵每一行和
colMeans() # 列平均
rowMeans() # 行平均
#矩阵乘法
m<-matrix(1:9,3,3)
n<-matrix(2:10,3,3)
m*n # 内积,对应位置元素相乘即可
m%*%n # 外积,线代中的矩阵乘法运算
diag(n) # 返回对角矩阵的值2 6 10
t(n) # 矩阵转置,行列互换
|