前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言基础教程——第3章:数据结构——矩阵

R语言基础教程——第3章:数据结构——矩阵

作者头像
DoubleHelix
发布2019-08-07 10:25:20
7640
发布2019-08-07 10:25:20
举报

矩阵

矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。可通过函数matrix创建矩阵。一般使用格式为:

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

其中data包含了矩阵的元素,nrow和ncol用以指定行和列的维数,dimnames包含了可选的、以字符型向量表示的行名和列名。选项byrow则表明矩阵应当按行填充(byrow=TRUE)还是按列填充(byrow=FALSE),默认情况下按列填充。

1

创建矩阵

#创建1:16的矩阵,行为4行,先按行排列

mat = matrix(1:16,nrow = 4,ncol = 4,byrow = TRUE)

2

查看矩阵维数并更改列名

> dim(mat)#查看维度[1] 4 4> length(mat)# 查看元素总个数[1] 16> colnames(mat) = c('a','b','c','d') #更改列名> rownames(mat) = c('e','f','g','h') #更改行名
> dim.name = dimnames(mat)> dim.name[[1]][1] "e" "f" "g" "h"[[2]][1] "a" "b" "c" "d"> dim.name[[1]][1] "e" "f" "g" "h"

3

矩阵的取值

> mat[1,3] #取第一行,第三列元素[1] 3> mat[2,] #取第二行,所有列a b c d 5 6 7 8 > mat[,3:4]#取第三列到第四列,所有行   c  de  3  4f  7  8g 11 12h 15 16> mat[c(1,3),c(2,4)] #当取不相邻矩阵的行和列可以用c()创建向量   b  de  2  4g 10 12> mat[-1,-2] #除去第一行 和第二列不取,其他全取   a  c  df  5  7  8g  9 11 12h 13 15 16> mat['f','a'] #也可以使用行名和列名来取[1] 5

4

矩阵的运算-元素间运算

对矩阵的每个元素进行加减乘除,且顺序是按照列来算的。

> mat #原始矩阵   a  b  c  de  1  2  3  4f  5  6  7  8g  9 10 11 12h 13 14 15 16> mat*3 #每个元素乘以3   a  b  c  de  3  6  9 12f 15 18 21 24g 27 30 33 36h 39 42 45 48> mat*c(1:4) #每一列均乘以1,2,3,4   a  b  c  de  1  2  3  4f 10 12 14 16g 27 30 33 36h 52 56 60 64> mat #对矩阵运算不会改变原矩阵   a  b  c  de  1  2  3  4f  5  6  7  8g  9 10 11 12h 13 14 15 16> mat1 = mat*c(1:4) #如果需要保留矩阵运算之后的矩阵,需要额外命名> mat1   a  b  c  de  1  2  3  4f 10 12 14 16g 27 30 33 36h 52 56 60 64> mat*c(1:16) #按列进行对应元素相乘   a   b   c   de  1  10  27  52f 10  36  70 112g 27  70 121 180h 52 112 180 256> mat + 5   a  b  c  de  6  7  8  9f 10 11 12 13g 14 15 16 17h 18 19 20 21> mat/3          a         b        c        de 0.3333333 0.6666667 1.000000 1.333333f 1.6666667 2.0000000 2.333333 2.666667g 3.0000000 3.3333333 3.666667 4.000000h 4.3333333 4.6666667 5.000000 5.333333> mat/c(1:3) #如果维度不对应,会有警告     a  b   c  de  1.0  1 1.0  4f  2.5  2 7.0  4g  3.0 10 5.5  4h 13.0  7 5.0 16Warning message:In mat/c(1:3) :  longer object length is not a multiple of shorter object length

5

矩阵运算-矩阵间运算

> t(mat) #求矩阵转置  e f  g  ha 1 5  9 13b 2 6 10 14c 3 7 11 15d 4 8 12 16> mat%*%mat #矩阵与矩阵相乘    a   b   c   de  90 100 110 120f 202 228 254 280g 314 356 398 440h 426 484 542 600> mat%*%c(1:4)  [,1]e   30f   70g  110h  150> det(mat) #求矩阵的行列式[1] 4.733165e-30> diag(mat) #求矩阵的对角线元素[1]  1  6 11 16> mat2 = matrix(rnorm(16),nrow = 4) #rnorm表示在R中生成标准正态分布(normolisation)的随机数> mat3 = solve(mat2) #求逆> mat2%*%mat3 
> rowMeans(mat) #对行求均值   e    f    g    h  2.5  6.5 10.5 14.5 > colMeans(mat)#对列求均值 a  b  c  d  7  8  9 10 > rowSums(mat) #对行求和 e  f  g  h 10 26 42 58 > colSums(mat)#对列求和 a  b  c  d 28 32 36 40 
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MedBioInfoCloud 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档