矩阵的存储默认是按列进行存储的
matrix (data = NA, nrow = 1, ncol = 1, byrow =FALSE, dimnames = NULL)
创建一个c(1:12)的三行四列的矩阵,
colnames<-c("c1","c2","c3","c4")
rownames<-c("r1","r2","r3")
x<-matrix(1:12,nrow=3,ncol=4,byrow=TRUE,dimnames=list(rownames,colnames))
x
c1 c2 c3 c4
r1 1 2 3 4
r2 5 6 7 8
r3 9 10 11 12
y<-t(x)
若是针对的是一个向量
y<-(1:10)
装置后得到的是行向量
[1] "matrix"
若要的到列向量则
matrix(rnorm(100),nrow=10)
matrix(2,ncol=n,nrow=m)
4.1创建对角矩阵
diag(x,ncol=n,nrow=m)
若x为矩阵 则diag(x)将会提取矩阵x的对角,则返回的是向量值
返回的是以矩阵对角的对角矩阵
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
n<-ncol
m<-nrow
为矩阵的行和列命名
rownames(x)<-c()
colnames(x)<c()
A为m×n矩阵,c>0,在R中求cA可用符号:“*”,例如:
A为m×n矩阵,B为n×k矩阵,在R中求AB可用符号:“%*%”,例如:
对矩阵求逆
方法一:直接用solve(x)
方法二:加载包MASS
library(MASS)
ginv(matrix)
向量的内积
x<-c(1:5)
y<-c(3:7)
向量的外积
向量、矩阵的外积(叉积)
设x和y是n维向量,则x%o%y表示x与y作外积.
, , 2, 1
[,1] [,2] [,3] [,4]
[1,]28 14 20
[2,]4 10 16 22
[3,]6 12 18 24
, , 1, 2
[,1] [,2] [,3] [,4]
[1,]3 12 21 30
[2,]6 15 24 33
[3,]9 18 27 36
, , 2, 2
[,1] [,2] [,3] [,4]
[1,]4 16 28 40
[2,]8 20 32 44
[3,] 12 24 36 48
outer()是更为强大的外积运算函数,outer(x,y)计算向量x与y的外积,它等价于x %o%y
函数。outer()的一般调用格式为
outer(x,y,fun=”*”)
det(x),求矩阵x的行列式值
qr(x)$rank求x矩阵的秩
解线性方程组和求矩阵的逆矩阵
之前我们讲了向量,向量就仿佛一个一维数组一样
那么我们接下来就讲讲二维数组
创建一个matrix需要用到matrix函数
martix(参数1,nrow=行数,ncol=列数,byrow=布尔值)
参数1:matrix初始化的值,如果给出的值不够matrix长度将重复赋值,如果给出的值溢出将会报错。
参数byrow:这是一个布尔值如果给定TRUE,初始数据按行顺序推进,反之按列顺序推进。
这里说一下R语言中 ' . ' 并没有特殊的意义,只是变量名的一部分
读取矩阵我们用到:矩阵名[行,列]
这里的行和列可以接收单个数组也可以接收一个向量
当然如果是负数和向量一样就是排除掉对应索引指向的值
test.m[2, ] #取第二行,我们注意这里把列的地方空出来就是显示所有列
test.m[ ,2] #取第二列
test.m[2,2] #取第二行第二个
我们也可以给索引一个向量 比如3:4或者c(1,4)之类的,如上图所示,索引值也可以不连续
我们知道在二维表中 我们通常给每一行每一列取一个名字
矩阵中我们也可以这样做
首先我们给每一行每一列取一个名字,用向量保存
之后我们使用rownames(矩阵名)<-存有名字的向量给每行取名,给列取名同理见上图
取名之后我们可以用名称代替下标访问,例如:test.m['2nd','二']
看到这里,我真的觉得数据分析相关专业十分的艰难,需要用一些稀奇古怪的东西来进行数据分析
因为本人是计科专业的,平时用的数组就是单纯的数组,R语言的数组我一开始是令我怀疑人生的。
创建一个数组我们需要用到array函数
array(data=数组中的数据从1维平铺, dim=给定一个数值型向量, dimnames=list(包含一维名称的向量,二维名称....))
其中data参数用来给出数组的数据从第一维第一个开始顺序向后平铺
dim给定数组的纬度和每纬的宽度
dimnames给每个纬度的每格的名字 #这个参数可以忽略
至于如何读取数组中的数据和矩阵一致这里不再叙述,只不过把二维改成多维的情况。
我截完图发现arr[2,2,2]这个例子并不好,如果我们查看arr[3,2,1]将会显示6。