R语言系统教程(三):多维数组和矩阵

本文详细介绍了R语言中数组和矩阵的操作,包括如何生成数组和矩阵,数组下标的操作,矩阵的转置、行列式、内积、外积、乘法等运算,以及解决线性方程组、求矩阵的逆、特征值和奇异值分解。此外,还讨论了与矩阵运算相关的函数,如apply()、cbind()和rbind()等。
摘要由CSDN通过智能技术生成

3.1 生成数组或矩阵

数组可以看成是带多个下标的类型相同的元素的集合,但是注意,尽管数学上向量可以看成一维数组,但是R中不行,因为数组一定是有维度属性的,但向量没有。

3.1.1 将向量定义为数组

向量只有定义了维数(dim)属性后才能看做数组。

z = 1:12
dim(z)
## NULL
dim(z) = c(3,4)
z
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
dim(z) = 12
z
## [1] 1 2 3 4 5 6 7 8 9 10 11 12

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

array()函数声明如下:
array(data = NA, dim = length(data), dimnames = NULL)
其中data为向量数据,dim是维度向量,默认为原向量的长度,dimnames为各维度的名字。注意如果data数据个数不足或多于构造多维数组所需的数量,则采用循环或只取较前部分的方式。因此使用单0或单1数据构造全0或全1矩阵的方法非常常见。

X = array(1:20, dim = 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
Z = array(0, dim = c(3, 4, 2))
Z
## , , 1
##
##     [,1] [,2] [,3] [,4]
## [1,]   0    0    0    0
## [2,]   0    0    0    0
## [3,]   0    0    0    0
##
## , , 2
##
##     [,1] [,2] [,3] [,4]
## [1,]   0    0    0    0
## [2,]   0    0    0    0
## [3,]   0    0    0    0

上面这种全0的定义方式常用来对数组进行初始化。

3.1.3 用matrix()函数构造矩阵

矩阵即是二维数组,是R中用的最多的数据格式之一,函数matrix()是构造矩阵的函数,其构造形式如下:
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
其中data是向量数据,nrow是矩阵行数,ncol是矩阵列数,当byrow=TRUE时,数据按行存放,否则按列存放,dimnames为维数名字。
注意:若仅指定nrow或ncol时,如果data数据个数不够,则另一个取1,循环补齐,若为nrow或ncol的倍数时,则未指定的自动取其另一个因数,比其大却不是倍数,warning!(没看懂没关系,看例子你就懂了(╹▽╹))

A = matrix(1:15, nrow = 3, ncol = 5, byrow = TRUE)
A
##     [,1] [,2] [,3] [,4] [,5]
## [1,]   1    2    3    4    5
## [2,]   6    7    8    9   10
## [3,]  11   12   13   14   15
matrix(1:15, nrow=3,byrow=TRUE)
##     [,1] [,2] [,3] [,4] [,5]
## [1,]   1    2    3    4    5
## [2,]   6    7    8    9   10
## [3,]  11   12   13   14   15
matrix(1:15, ncol=5,byrow=TRUE)
##     [,1] [,2] [,3] [,4] [,5]
## [1,]   1    2    3    4    5
## [2,]   6    7    8    9   10
## [3,]  11   12   13   14   15

3.2 数组下标

与向量相同,数组同样可以按照下标访问或修改元素。

3.2.1 数组下标

使用方括号形式,并用逗号分隔开不同维度的下标即可

a = 1:24
dim(a) = c(2,3,4)
a[2,1,2]
## [1] 8

下标同样为向量形式,如果不写则表示此维全取

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

还有一种是通过向量下标方式取值,但要注意这样取出来的是向量,而不是数组。
注:由于格式问题,从这里开始作者更换了代码输出样式,>后代表的是代码,其他的是输出。

> b = a[3:6]
> b
[1] 3 4 5 6

3.2.2 不规则的数组下标

如果想把数组中的任意位置元素作为数组访问,其方法是使用一个二维数组作为数组下标,二维数组的每一行是一个元素的下标,列数为数组维数。

> b = matrix(c(1,1,1,2,2,3,1,3
  • 4
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值