美文网首页RR语言学习
R语言学习笔记(4)-矩阵&数组

R语言学习笔记(4)-矩阵&数组

作者: Akuooo | 来源:发表于2021-01-18 14:27 被阅读0次

参考视频:https://www.bilibili.com/video/BV19x411X7C6?t=2&p=20

一、矩阵

矩阵(Matrix):是一个按照长方阵列排列的复数或实数集合。向量是一维的,矩阵是二维的,需要有行和列。

在R中,矩阵是有维数的向量,矩阵元素可以使数值型、字符型或逻辑型,但每个元素必须是相同模式,这个和向量一致。

很有名的鸢尾花数据集就是一个矩阵。

  1. 创建矩阵
> x <- 1:20
> m <- matrix(x,nrow=4,ncol=5)
> m
     [,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

> 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

> m <- matrix(1:20,4,byrow = T)//byrow=true,按行排列
> m
     [,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)//byrow=false,按列排列
     [,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
#定义行列名称
> rnames <- c("R1","R2","R3","R4")
> cnames <- c("C1","C2","C3","C4","C5")
> dimnames(m) <- list(rnames,cnames)//dim=dimension,维数
> 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函数可以显示向量的维数

> dim(x)
NULL
> dim(x) <- c(4,5)
> x//由向量变成了矩阵
     [,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

二、数组

R中的向量~其他语言中的数组
R中的数组~多维矩阵

1.创建数组
(1)dim()

#定义三维数组
> x <- 1:20
> dim(x) <- c(2,2,5)
> x
, , 1

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

, , 2

     [,1] [,2]
[1,]    5    7
[2,]    6    8

, , 3

     [,1] [,2]
[1,]    9   11
[2,]   10   12

, , 4

     [,1] [,2]
[1,]   13   15
[2,]   14   16

, , 5

     [,1] [,2]
[1,]   17   19
[2,]   18   20

(2)array()

> dim1 <- c("A1","A2")
> dim2 <- c("B1","B2","B3")
> dim3 <- c("C1","C2","C3","C4")
> z <- array(1:24,dim = 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

三、矩阵索引(定位具体数据值)

  1. 可通过矩阵下标进行访问
    R使用线性代数中i,j
    i:表示行号 j:表示列号
> m <- matrix(1:20,4,5,byrow = T)
> m
     [,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[1,2]//访问第一行第二列
[1] 2
> m[1,c(2,3,4)]//访问第一行的第2 3 4列
[1] 2 3 4
> m[c(2,3,4),c(2,3)]//访问2,3,4行的2、3列(子集)
     [,1] [,2]
[1,]    7    8
[2,]   12   13
[3,]   17   18
> m[2,]//访问第二行
[1]  6  7  8  9 10
> m[,2]//访问第二列
[1]  2  7 12 17
> m[-1,2]//访问非第一行的第二列(不包括第一行的第二列)
[1]  7 12 17
  1. 通过行名列名来访问
    名称是字符串,要添加引号
> dimnames(m)=list (rnames,cnames)
> m
   C1 C2 C3 C4 C5
R1  1  2  3  4  5
R2  6  7  8  9 10
R3 11 12 13 14 15
R4 16 17 18 19 20
> m["R1","C2"]
[1] 2

例子:state.x77矩阵

> head(state.x77)
           Population Income Illiteracy Life Exp Murder HS Grad Frost   Area
Alabama          3615   3624        2.1    69.05   15.1    41.3    20  50708
Alaska            365   6315        1.5    69.31   11.3    66.7   152 566432
Arizona          2212   4530        1.8    70.55    7.8    58.1    15 113417
Arkansas         2110   3378        1.9    70.66   10.1    39.9    65  51945
California      21198   5114        1.1    71.71   10.3    62.6    20 156361
Colorado         2541   4884        0.7    72.06    6.8    63.9   166 103766
> state.x77[,"Income"]
       Alabama         Alaska        Arizona       Arkansas     California 
          3624           6315           4530           3378           5114 
      Colorado    Connecticut       Delaware        Florida        Georgia 
          4884           5348           4809           4815           4091 
        Hawaii          Idaho       Illinois        Indiana           Iowa 
          4963           4119           5107           4458           4628 
        Kansas       Kentucky      Louisiana          Maine       Maryland 
          4669           3712           3545           3694           5299 
 Massachusetts       Michigan      Minnesota    Mississippi       Missouri 
          4755           4751           4675           3098           4254 
       Montana       Nebraska         Nevada  New Hampshire     New Jersey 
          4347           4508           5149           4281           5237 
    New Mexico       New York North Carolina   North Dakota           Ohio 
          3601           4903           3875           5087           4561 
      Oklahoma         Oregon   Pennsylvania   Rhode Island South Carolina 
          3983           4660           4449           4558           3635 
  South Dakota      Tennessee          Texas           Utah        Vermont 
          4167           3821           4188           4022           3907 
      Virginia     Washington  West Virginia      Wisconsin        Wyoming 
          4701           4864           3617           4468           4566 
> state.x77["Alabama",]
Population     Income Illiteracy   Life Exp     Murder    HS Grad      Frost       Area 
   3615.00    3624.00       2.10      69.05      15.10      41.30      20.00   50708.00 

四、矩阵运算

  1. 若元素都是数值型,则与向量类似(加、减……)
> m+1
   C1 C2 C3 C4 C5
R1  2  3  4  5  6
R2  7  8  9 10 11
R3 12 13 14 15 16
R4 17 18 19 20 21
> m+m
   C1 C2 C3 C4 C5
R1  2  4  6  8 10
R2 12 14 16 18 20
R3 22 24 26 28 30
R4 32 34 36 38 40
> m*m
    C1  C2  C3  C4  C5
R1   1   4   9  16  25
R2  36  49  64  81 100
R3 121 144 169 196 225
R4 256 289 324 361 400
> m/m
   C1 C2 C3 C4 C5
R1  1  1  1  1  1
R2  1  1  1  1  1
R3  1  1  1  1  1
R4  1  1  1  1  1

矩阵的运算需要行和列一致

> n <- matrix(1:20,5,4)
> n
     [,1] [,2] [,3] [,4]
[1,]    1    6   11   16
[2,]    2    7   12   17
[3,]    3    8   13   18
[4,]    4    9   14   19
[5,]    5   10   15   20
> m
   C1 C2 C3 C4 C5
R1  1  2  3  4  5
R2  6  7  8  9 10
R3 11 12 13 14 15
R4 16 17 18 19 20
> m+n
Error in m + n : 非整合陈列

相关计算函数:
colSums(m):计算每一列的和

> colSums(m)
C1 C2 C3 C4 C5 
34 38 42 46 50 

rowSums(m):计算每一行的和

> rowSums(m)
R1 R2 R3 R4 
15 40 65 90 

rowMeans(m):平均值

  1. 矩阵内积、外积
> n <- matrix(1:9,3,3)
> t <- matrix(2:10,3,3)
> n * t //内积
     [,1] [,2] [,3]
[1,]    2   20   56
[2,]    6   30   72
[3,]   12   42   90
> n %*% t  //外积
     [,1] [,2] [,3]
[1,]   42   78  114
[2,]   51   96  141
[3,]   60  114  168

若是不清楚何为内积何为外积,可参考:矩阵的内积、外积

diag(n):返回矩阵n对角线的值

> n
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> diag(n)
[1] 1 5 9

t(m):将矩阵m进行转置,行和列进行互换

> m
   C1 C2 C3 C4 C5
R1  1  2  3  4  5
R2  6  7  8  9 10
R3 11 12 13 14 15
R4 16 17 18 19 20
> t(m)
   R1 R2 R3 R4
C1  1  6 11 16
C2  2  7 12 17
C3  3  8 13 18
C4  4  9 14 19
C5  5 10 15 20

相关文章

  • R语言学习笔记(4)-矩阵&数组

    参考视频:https://www.bilibili.com/video/BV19x411X7C6?t=2&p=20...

  • R: 相关系数

    ref:R画月亮阴晴圆缺:corrplot绘图相关系数矩阵 ref:R语言学习笔记之相关性矩阵分析及其可视化 - ...

  • 2020-05-14

    学习小组DAY4笔记-lyq 今天初探R语言 R语言安装 R语言面板在简单了解

  • Day5—刘强

    R语言的数据结构 数据类型 R语言主要数据类型如下: 向量(vector) 矩阵(Matrix) 数组(Array...

  • R语言矩阵与数组2021.1.24

    总结一句,放在开头:R语言中的向量更像是数组,而数组更像是矩阵 。 矩阵 矩阵(Matrix)是一个按照长方阵列排...

  • R语言入门笔记(2) - R语言科学计算

    R语言科学计算 分类统计 mean(),求平均值 min(),求最小值 sd(),求标准差 数组和矩阵 数组与矩阵...

  • R 语言-矩阵与数组

    1、矩阵 矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合。向量是一维的,而矩阵是二维的,需要有行和列。...

  • R语言——向量、矩阵、数组

    向量 向量是用于存储数值型、字符型或逻辑型数据的一维数组。执行组合功能的函数c()可用来创建向量。 其中,a是数值...

  • 学习小组Day5笔记——四海

    R语言第二天——R基础 数据类型 向量 vector* #重要 矩阵 matrix 数组 array 数据框 da...

  • RNA-seq分析(三)DESeq2

    1、DESeq2差异表达分析 R语言数据类型:向量(vector);列表(list);矩阵(matrix);数组(...

网友评论

    本文标题:R语言学习笔记(4)-矩阵&数组

    本文链接:https://www.haomeiwen.com/subject/nggtzktx.html