R基础知识-矩阵

矩阵

矩阵内的每个元素都有相同的模式

 

创建矩阵

matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)

 

as.matrix(x, ...)

## S3 method for class 'data.frame'

as.matrix(x, rownames.force = NA, ...)

 

is.matrix(x)

 

 

> m1 <- matrix(c(1:30), nrow=5, ncol=6, byrow=T, dimnames = list(c("A", "B", "C", "D","E"), c("a", "b", "c", "d", "e", "f")))

> m1

   a  b  c  d  e  f

A  1  2  3  4  5  6

B  7  8  9 10 11 12

C 13 14 15 16 17 18

D 19 20 21 22 23 24

E 25 26 27 28 29 30

 

> m2 <- matrix(c(1:30), nrow =5, ncol=6, byrow=F, dimnames = list(c("A", "B", "C", "D","E"), c("a", "b", "c", "d", "e", "f")))

> m2

  a  b  c  d  e  f

A 1  6 11 16 21 26

B 2  7 12 17 22 27

C 3  8 13 18 23 28

D 4  9 14 19 24 29

E 5 10 15 20 25 30

 

 

 

 

默认是按照列排列的,也就是说byrow=FALSE

dim(x):查看变量的维数;重新设置的维数,例如dim(x)=c(3,2)

 

> dim(m2)  = c(6,5)

> m2

     [,1] [,2] [,3] [,4] [,5]

[1,]    1    7   13   19   25

[2,]    2    8   14   20   26

[3,]    3    9   15   21   27

[4,]    4   10   16   22   28

[5,]    5   11   17   23   29

[6,]    6   12   18   24   30

> dim(m2)

[1] 6 5

> dim(m2)=c(5,6)

> dim(m2)

[1] 5 6

> m2

     [,1] [,2] [,3] [,4] [,5] [,6]

[1,]    1    6   11   16   21   26

[2,]    2    7   12   17   22   27

[3,]    3    8   13   18   23   28

[4,]    4    9   14   19   24   29

[5,]    5   10   15   20   25   30

 

 

 

matrix创建矩阵

dim 查看矩阵维度,重新设置维度

注意这里在定义dimnames时,用的是list

 

 

 

矩阵转化为向量

 

> x <- c(1:10)

> m3 <- matrix(x, nrow=5, ncol=2, byrow = F)

> m3

     [,1] [,2]

[1,]    1    6

[2,]    2    7

[3,]    3    8

[4,]    4    9

[5,]    5   10

> b<- as.vector(m3)

> b

 [1]  1  2  3  4  5  6  7  8  9 10

> m3

     [,1] [,2]

[1,]    1    6

[2,]    2    7

[3,]    3    8

[4,]    4    9

[5,]    5   10

> m4 <- matrix(x, nrow=5, ncol=2, byrow = T)

> m4

     [,1] [,2]

[1,]    1    2

[2,]    3    4

[3,]    5    6

[4,]    7    8

[5,]    9   10

> d <- as.vector(m4)

> d

 [1]  1  3  5  7  9  2  4  6  8 10

 
 

 

 

这里将matrix转换成向量使用as.vector()

 

 

 

矩阵索引

矩阵跟向量类似,使用下标和方括号来访问矩阵中的元素。

x[1,] 访问第一行的所有元素

x[,1] 访问第一列的所有元素

x[i, j]  访问ij列的元素

 

> m2

     [,1] [,2] [,3] [,4] [,5] [,6]

[1,]    1    6   11   16   21   26

[2,]    2    7   12   17   22   27

[3,]    3    8   13   18   23   28

[4,]    4    9   14   19   24   29

[5,]    5   10   15   20   25   30

> m2[2,]

[1]  2  7 12 17 22 27

> m2[,3]

[1] 11 12 13 14 15

> m2[3,4]

[1] 18

> m2[c(2:4),]

     [,1] [,2] [,3] [,4] [,5] [,6]

[1,]    2    7   12   17   22   27

[2,]    3    8   13   18   23   28

[3,]    4    9   14   19   24   29

> m2[, c(3:5)]

     [,1] [,2] [,3]

[1,]   11   16   21

[2,]   12   17   22

[3,]   13   18   23

[4,]   14   19   24

[5,]   15   20   25

 

>

 

 

 

矩阵的运算

矩阵的运算比较丰富,包括四则运算,对行求和,对列求和等。

> m2

     [,1] [,2] [,3] [,4] [,5] [,6]

[1,]    1    6   11   16   21   26

[2,]    2    7   12   17   22   27

[3,]    3    8   13   18   23   28

[4,]    4    9   14   19   24   29

[5,]    5   10   15   20   25   30

> colSums(m2)

[1]  15  40  65  90 115 140

> rowSums(m2)

[1]  81  87  93  99 105

> colMeans(m2)

[1]  3  8 13 18 23 28

> rowMeans(m2)

[1] 13.5 14.5 15.5 16.5 17.5

> t(m2)

     [,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

[5,]   21   22   23   24   25

[6,]   26   27   28   29   30

> crossprod(m2)

     [,1] [,2] [,3] [,4] [,5] [,6]

[1,]   55  130  205  280  355  430

[2,]  130  330  530  730  930 1130

[3,]  205  530  855 1180 1505 1830

[4,]  280  730 1180 1630 2080 2530

[5,]  355  930 1505 2080 2655 3230

[6,]  430 1130 1830 2530 3230 3930

> m2

     [,1] [,2] [,3] [,4] [,5] [,6]

[1,]    1    6   11   16   21   26

[2,]    2    7   12   17   22   27

[3,]    3    8   13   18   23   28

[4,]    4    9   14   19   24   29

[5,]    5   10   15   20   25   30

> t(m2)

     [,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

[5,]   21   22   23   24   25

[6,]   26   27   28   29   30

> m2%*%t(m2)

     [,1] [,2] [,3] [,4] [,5]

[1,] 1531 1612 1693 1774 1855

[2,] 1612 1699 1786 1873 1960

[3,] 1693 1786 1879 1972 2065

[4,] 1774 1873 1972 2071 2170

[5,] 1855 1960 2065 2170 2275

> diag(m2)

[1]  1  7 13 19 25

> solve(m2)

Error in solve.default(m2) : 'a' (5 x 6) must be square

> eigen(m2)

Error in eigen(m2) : eigen里的矩阵不是正方形的

 

>

 

 

 

猜你喜欢

转载自blog.csdn.net/guduchangjian/article/details/85078712