R语言--(4)--多维数组和矩阵

生成数组或矩阵

数组(array) 可以看成是带多个下标的类型相同的元素的集合,常用的是数值型的数组如矩阵,也可以有其它类型(如字符型、逻辑型、复数型)

数组有一个特征属性叫做维数向量(dim属性)

向量定义成数组

向量只有定义了维数向量(dim属性)才能看作是数组
在这里插入图片描述
向量定义成一维数组
在这里插入图片描述

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=FALSEbyrow=TRUE, 生成的矩阵按行放置
缺省时相当于byrow=FALSE, 生成的矩阵按列放置
dimnames=NULL是数组维的名字,缺省时为空

3行5列矩阵,按行存放
在这里插入图片描述

3行5列矩阵,按列存放
在这里插入图片描述

数组下标

通过数组下标对数组元素进行访问,或进行运算

常规数组下标

在这里插入图片描述
访问指定元素

a[2,1,3] 

第一个数值:行数; 第二各数值:列数; 第三个数值:维数
在这里插入图片描述
得到 m*n 数组

a[1, 2:3, 2:3]
     [,1] [,2]
[1,]    9   15
[2,]   11   17

在这里插入图片描述
省略某一维的下标,表示该维全选

a[1, , ]
     [,1] [,2] [,3] [,4]
[1,]    1    7   13   19
[2,]    3    9   15   21
[3,]    5   11   17   23

在这里插入图片描述

a[ , 2, ]
     [,1] [,2] [,3] [,4]
[1,]    3    9   15   21
[2,]    4   10   16   22

在这里插入图片描述

a[1,1, ]
[1]  1  7 13 19

在这里插入图片描述
整个数组

a[] 

在这里插入图片描述

特殊下标

对于数组只用一个下标向量(是向量,不是数组),这时忽略数组的维数信息表达式,看作是对数组的数据向量取子集

a[3:10]

在这里插入图片描述

不规则的数组下标

用一个二维数组作为数组的下标,二维数组的每一行是一个元素的下标,列数为数组的为数组的维数
在这里插入图片描述
在这里插入图片描述

数组的四则运算

形状一致的向量(数组)四则运算

加 +
在这里插入图片描述
减 -
在这里插入图片描述
乘 *
在这里插入图片描述
除 /
在这里插入图片描述

形状不一致的向量(数组)四则运算

规则是将向量(或数组)中的数据与对应向量(或数组)中的数据进行运算,把短向量(或数组)的数据循环使用,从而可以与长向量(或数组)数据进行匹配,并尽可能保留共同的数组属性
在这里插入图片描述
在这里插入图片描述

矩阵运算

转置预算 t()

矩阵A,函数t(A)表示矩阵A的转置,即 A T A^T AT
在这里插入图片描述

方阵的行列式 det()

  1. n阶方阵:是一个n行n列的数表,而n阶行列式就是由这样一个n行n列的数表按一定的运算确定出的一个数。
  2. 方阵A的行列式,记|A|detA ,由n阶方阵A的元素构成的行列式
  3. 只有方阵才有行列式的概念,若A是行数与列数不等的矩阵,则A没有行列式的定义

在这里插入图片描述

向量的内积 %*%crossprod()

%*%
在这里插入图片描述
crossprod(x,y)
在这里插入图片描述
crossprod(x) 表示 x与x的内积,即 ∥ x ∥ 2 2 \parallel x \parallel^2_2 x22
在这里插入图片描述

向量的外积(叉积) %o%outer()

%o% x与y的外积
在这里插入图片描述
outer(x,y) x与y的外积
在这里插入图片描述
tcrossprod(x,y) x与y的外积,表示 x %*% t(y)
在这里插入图片描述
tcrossprod(x)x与x的外积
在这里插入图片描述

矩阵的乘法

矩阵中对应元素的乘积(矩阵A和B具有相同的维数)

A * B

在这里插入图片描述
矩阵的乘积(矩阵A的列数等于矩阵B的行数)

A %*% B

在这里插入图片描述
crossprod(A,B) 表示的是 t(A) %*% B
在这里插入图片描述
tcrossprod(A,B) 表示的是 A %*% t(B)
在这里插入图片描述

生成对角阵和矩阵取对角 diag()

diag(向量 表示以向量元素为对角线元素的对角阵
在这里插入图片描述
diag(矩阵) 表示取矩阵对角线上的元素的向量
在这里插入图片描述

解线性方程组 和 矩阵的逆矩阵 solve()

解线性方程组 A x = b Ax = b Ax=b, 其命令形式为 solve(A,b)
{ x 1 + 2 x 2 + 3 x 3 = 1 4 x 1 + 5 x 2 + 6 x 3 = 1 7 x 1 + 8 x 2 + 10 x 3 = 1 \left\{ \begin{array}{c} x_1+ 2x_2 +3x_3=1 \\ 4x_1+ 5x_2+6x_3=1 \\ 7x_1+ 8x_2+10x_3=1 \\ \end{array} \right. x1+2x2+3x3=14x1+5x2+6x3=17x1+8x2+10x3=1
即       A = [ 1 2 3 4 5 6 7 8 10 ] A=\left[ \begin{array}{ccc} 1& 2& 3 \\ 4& 5& 6 \\ 7& 8& 10 \end{array} \right ] A=1472583610 ,   b = [ 1 1 1 ] b=\left[ \begin{array}{cc} 1 \\ 1 \\ 1 \end{array} \right ] b=111

solve(A,b)

在这里插入图片描述
矩阵A的逆矩阵 solve(A)
在这里插入图片描述

对称矩阵的特征值与特征向量 eigen()

对称矩阵
在这里插入图片描述
eigen(Sm)
在这里插入图片描述
特征向量 ev$vectors
在这里插入图片描述
特征值 ev$values
在这里插入图片描述

矩阵的奇异值分解 svd()

A = U D V T A = UDV^T A=UDVT,其中U,V是正交阵,D为对角阵,也就是A的奇异值。
svd(A) 返回的是列表
在这里插入图片描述
svd(A)$d 表示矩阵A的奇异值,即矩阵D的对角线上的元素
在这里插入图片描述
svd(A)$u 正交阵U
在这里插入图片描述

svd(A)$v 正交阵V
在这里插入图片描述

最小拟合与QR分解 lsfit()qr()

y是观测值

x0.00.20.40.60.8
y0.91.92.83.34.2

lsfit(x,y) 返回值是最小二乘拟合的结果
在这里插入图片描述
QR分解函数 qr(),输入的矩阵需要加以1为元素的列,其返回值是列表
在这里插入图片描述
qr.coef(Xplus,y) 计算最小二乘的系数
在这里插入图片描述

得到最小二乘的拟合值
在这里插入图片描述
得到最小二乘的残差值
在这里插入图片描述

与矩阵(数组)运算有关的函数

获取矩阵的维数 dim()nrow()ncol()

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

矩阵的合并 cbind()rbind()

rbind() 把自变量纵向拼成一个大矩阵,自变量是矩阵或看作行向量的向量时,自变量的宽度应该相等,如果参与合并的自变量比其变量短,则循环补足后合并。
在这里插入图片描述
cbind() 把自变量横向拼成一个大矩阵,自变量是矩阵或看作列向量的向量时,自变量的高度应该相等.在这里插入图片描述
如果参与合并的自变量比其变量短,则循环补足后合并.
在这里插入图片描述

矩阵的拉直 as.vector()

as.vector(A) 将矩阵转化为向量
在这里插入图片描述

数组的维名字 dimnames()

定义时赋值

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

在这里插入图片描述

后赋值

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

在这里插入图片描述
属性 colnamesrownames 访问或者赋值 行名与列名
在这里插入图片描述

数组的广义转置 aperm()

aperm(A, perm) 把数组A的各维按 perm 中指定的新次序重新排列

构造一个 2行3列4维的数组
在这里插入图片描述

perm=c(2,3,1) 表示原来行的个数变成了维度的个数,即原来每个矩阵有两行,则现在维度是2;原来列是三列,现在变成行数为三行;原来维度为四,现在列的个数为四.
在这里插入图片描述
矩阵A, 矩阵转置 A T A^T AT:
   即 t(A) 相当于 aperm(A,c(2,1))

数组某一维(或若干维)进行计算 apply()

apply(A, MARGIN, FUN, ...)
参数描述
A数组
MARGIN固定哪些维不变
FUN用来计算的函数

按行计算,MARGIN=1
在这里插入图片描述
按列计算,MARGIN=2
在这里插入图片描述

  • 6
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值