【R入门】多维数组和矩阵

生成数组或矩阵

数组可以看成一个由递增下标表示的数据项的集合,例如数值.
一个矩阵就是一个2维数组

将向量定义成数组

向量只有定义了维数后,才能被看做是数组
在这里插入图片描述

用array()函数构造多维数组

array(data=NA,dim=length(data),dimnames=Null)

其中data是一个向量数据,dim是数组各维的长度,默认值
为原向量的长度,dimnames是数组维的名字,默认值为空
在这里插入图片描述

用matrix()函数构造矩阵

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

其中data是一个向量数据,nrow是矩阵的行数,ncol是矩阵的列数
默认值byrow = FALSE表示数据按列放置,如果想按行设置,设置成byrow = TRUE
dimnames是数组维的名字,默认值为空
在这里插入图片描述

数组下标

我们可以对数组中的某些元素进行访问
在这里插入图片描述

矩阵的运算

A <- matrix(1:12, nrow=4, ncol=3, byrow=T)
B <- matrix(c(1,0), nrow=3, ncol=2, byrow=T)

在这里插入图片描述

矩阵的转置

t()
在这里插入图片描述

方阵的行列式

det()
在这里插入图片描述

矩阵的维数

函数 dim(A) 得到矩阵A的维数
函数 nrow(A) 得到矩阵A的行数
函数 ncol(A) 得到矩阵A的列数
在这里插入图片描述

矩阵的拉直

设A是一个矩阵,则函数 as.vector(A) 可以将矩阵A转化为向量
在这里插入图片描述

数组的维名字

dimnames保存各维的各个下标的名字

x<-matrix(1:6,ncol=2,dimnames=list(c("one", "two", "three"), c("First", "Second")),byrow=T)

也可以先做矩阵,再命令

x <- matrix(1:6, ncol=2,byrow=T)
colnames(x) <- c("First", "Second")
rownames(x) <- c("one", "two", "three")

在这里插入图片描述

向量的内积

若x和y是相同维数的向量,则x%*%表示x与y的内积
函数 crossprod() 是内积运算
在这里插入图片描述

向量的外积

x%o%y
函数outer()为外积运算
在这里插入图片描述

矩阵的乘法

A*B 表示维数相同的A和B对应的元素的乘积
A%*%B 是一般意义的矩阵乘积
在这里插入图片描述

对角阵的生成和运算

函数 diag() 的作用取决于它的参数,如果v是向量,diag(v)返回一个由v的元素为对角元素的对角矩阵。
若M为矩阵,diag(M) 返回一个由M主对角元素组成的向量。
这沿用了diag() 在 Matlab中的传统用法。
此外,多少有些让人迷惑,如果k只是一个数值,那 diag(k)是一个k*k的单位矩阵。
在这里插入图片描述

矩阵的合并

cbind() 是把其自变量横向拼成一个大矩阵
rbind() 是把其自变量纵向拼成一个大矩阵
在这里插入图片描述

求解线性方程组和矩阵的拟矩阵

已知Ax=b求x,命令为solve(A,b)
求矩阵A的逆,命令是solve(A)

A<-t(array(c(1:0,10),dim=c(3,3)))
b<-c(1,1,1)
x<-solve(A,b)
B<-solve(A)

求矩阵的特征根与特征向量

函数 eigen(SM) 是求取对称矩阵SM的特征值和特征向量
命令形式ev<-eigen(SM)
则ev存放着SM的特征值与特征向量,由列表形式给出
其中 ev$ values 是SM的特征值构成的向量,ev$ vectors是特征向量构成的矩阵

A<-t(array(c(1:8,10),dim=c(3,3)))
SM<-crossprod(A,A)
ev<-eigen(SM)
ev

矩阵的奇异值分解

函数 svd(A) 是对矩阵A做奇异值分解,即A=UDt(V)
其中U和V是正交阵,D为对角阵,也就是A的奇异值
svd(A)的返回值也是列表

A<-t(array(c(1:0,10),dim=c(3,3)))
svdA<-svd(A)
svdA
u%*%diag(d)%*%t(v)
发布了20 篇原创文章 · 获赞 14 · 访问量 865

猜你喜欢

转载自blog.csdn.net/weixin_43645790/article/details/103918139