R语言基础入门(10)之矩阵和数组

R语言将向量数据按照行方式转化为矩阵数据(设置参数byrow为TRUE) 阅读详情

目录

1.矩阵

创建矩阵

查看矩阵的行与列数

转置

2.矩阵子集

3.矩阵行列命名

4.命名后取子集

5.逻辑下标取子集

6.正整数向量的矩阵取子集

7.返回对角线向量

8.创建单位矩阵

9.cbind() 和 rbind() 函数

10. 矩阵运算

10.1  四则运算

10.2  矩阵乘法

10.3 向量与矩阵相乘

10.4 内积

10.5 外积

10.6 逆矩阵与线性方程组求解

10.7 apply() 函数

10.8 多维数组


1.矩阵

创建矩阵

        矩阵用 matrix 函数定义,实际存储成一个向量,根据保存的行数和列数对应到矩阵的元素,存储次序为按列存储。定义如
A <- matrix(11:16, nrow=3, ncol=2); print(A)

返回:

再如:

B <- matrix(c(1,-1, 1,1), nrow=2, ncol=2, byrow=TRUE); print(B)

返回:

matrix() 函数把矩阵元素以一个向量的形式输入,用 nrow ncol 规定行数和列数,向量元素填入矩阵的缺省次序是按列填入,用 byrow=TRUE 选项可以转换成按行填入。

查看矩阵的行与列数

nrow() ncol() 函数可以访问矩阵的行数和列数,如
nrow(A)

返回:

ncol(A)

返回:

矩阵有一个 dim 属性,内容是两个元素的向量,两个元素分别为矩阵的行数和列数。dim 属性可以用 dim() 函数访问。如

attributes(A)

返回:

 还有一个:

dim(A)

返回:

转置

t(A)

 返回:

2.矩阵子集

A[1,] 取出 A 的第一行,变成一个普通向量。用 A[,1] 取出 A 的第一列,变成一个普通向量。用 A[c(1,3),1:2] 取出指定行、列对应的子矩阵。如
看整个矩阵:
A

返回:

 取第一行:

A[1,]

返回:

取第一列:

A[,1]

返回:

 取1到3行,1到2列:

A[c(1,3), 1:2]

返回:

3.矩阵行列命名

colnames() 函 数 可 以 给 矩 阵 每 列 命 名, 也 可 以 访 问 矩 阵 列 名, 用 rownames() 函数可以给矩阵每行命名,也可以访问矩阵行名。如
colnames(A) <- c('X', 'Y')
rownames(A) <- c('a', 'b', 'c') 
A

返回:

4.命名后取子集

矩阵可以有一个 dimnames 属性,此属性是两个元素的列表(列表见稍后部分的介绍),两个元素分别为矩阵的行名字符型向量与列名字符型向量。如果仅有其中之一,缺失的一个取为 NULL
有了列名、行名后,矩阵下标可以用字符型向量,如
A[,'Y']
A['b',]
A[c('a', 'c'), 'Y']

返回:

注意在对矩阵取子集时,如果取出的子集仅有一行或仅有一列,结果就不再是矩阵而是变成了 R 向量,R 向量既不是行向量也不是列向量。如果想避免这样的规则起作用,需要在方括号下标中加选项 drop=FALSE,如

A[,1,drop=FALSE]

返回:

取出了 A 的第一列,作为列向量取出,所谓列向量实际是列数等于 1 的矩阵。如果用常量作为下标,其结果维数是确定的,不会出问题;如果用表达式作为下标,则表达式选出零个、一个、多个下标,结果维数会有不同,加 drop=FALSE 则是安全的做法。

5.逻辑下标取子集

矩阵也可以用逻辑下标取子集,比如
A

返回:

A[A[,1]>=2,'Y']

返回:

6.正整数向量的矩阵取子集

矩阵本质上是一个向量添加了 dim 属性,实际保存还是保存成一个向量,其中元素的保存次序是按列填入,所以,也可以向对一个向量取子集那样,仅用一个正整数向量的矩阵取子集。如
A

返回: 

A[c(1,3,5)]

返回:

为了挑选矩阵的任意元素组成的子集而不是子矩阵,可以用一个两列的矩阵作为下标,矩阵的每行的两个元素分别指定一个元素的行号和列号。如
ind <- matrix(c(1,1, 2,2, 3,2), ncol=2, byrow=TRUE) 
A

返回:

ind

返回:

A[ind]

返回:

c(A) A[] 返回矩阵 A 的所有元素。如果要修改矩阵 A 的所有元素,可以对 A[] 赋值。

7.返回对角线向量

对矩阵 A diag(A) 访问 A 的主对角线元素组成的向量
diag(A)

返回:

8.创建单位矩阵

x 为正整数值标量,diag(x) 返回 x 阶单位阵;若 x 为长度大于 1 的向量, diag(x) 返回以 x 的元素为主对角线元素的对角矩阵:

9.cbind() rbind() 函数

x 是向量, cbind(x) x 变成列向量,即列数为 1 的矩阵, rbind(x) 把 x 变成行向量。
x1 , x2 , x3 是等长的向量, cbind(x1, x2, x3) 把它们看成列向量并在一起组成一个矩阵。cbind() 的自变量可以同时包含向量与矩阵,向量的长度必须与矩阵行数相等。
cbind(c(1,2), c(3,4), c(5,6))

返回:

再如,

cbind(A, c(1,-1,10))

返回:

cbind() 的自变量中也允许有标量,这时此标量被重复使用。如

cbind(1, c(1,-1,10))

返回:

而rbind() 与cbind() 用法类似,可以等长的向量看成行向量上下摞在一起,可以是矩阵与长度等于矩阵列数的向量上下摞在一起,向量长度为 1 也可以。简单说就是这两个函数互为转置!!

10. 矩阵运算

10.1  四则运算

矩阵可以与标量作四则运算,结果为每个元素进行相应运算,如 

A

返回:

如加法运算:

C1 <- A + 2; C1

返回:

 

如除法运算:

C2 <- A / 2; C2

返回:

当运算为矩阵乘以一个标量时,就是线性代数中的矩阵的数乘运算。两个同形状的矩阵进行加、减运算,即对应元素相加、相减,用 A + B A - B 表示,如
C1 + C2

返回:

C1 - C2

返回:

这就是线性代数中矩阵的加、减运算。
对两个同形状的矩阵,用 * 表示两个矩阵对应元素相乘 ( 注意这不是线性代数中的矩阵乘法) ,用 / 表示两个矩阵对应元素相除。如
C1 * C2

返回:

C1 / C2

返回:

10.2  矩阵乘法

%*% 表示矩阵乘法而不是用 * 表示,注意矩阵乘法要求左边的矩阵的列数等于右边的矩阵的行数。如
先看一下前面的A,B矩阵
A
B

 返回:

 然后看一下矩阵相乘并赋值给c3

C3 <- A %*% B; C3

返回:

10.3 向量与矩阵相乘

B

返回:

看一下向量(1,1)与矩阵B相乘

c(1,1) %*% B

返回:

再看一下矩阵B与向量(1,1)相乘

B %*% c(1,1)

返回:

再看一下 向量*矩阵*向量

c(1,1) %*% B %*% c(1,1)

返回:

注意:矩阵乘法总是给出矩阵结果,即使此矩阵已经退化为行向量、列向量甚至于退化为标量也是一样。如果需要,可以用 c() 函数把一个矩阵转换成按列拉直的向量。

10.4 内积

x , y 是两个向量,计算向量内积,可以用 sum(x*y) 表示。
A , B 是两个矩阵, A T B 是广义的内积,也称为叉积 (crossprod) ,结果是一个矩阵,元素为 A 的每列与 B 的每列计算内积的结果。 A T B R 中可以表示为 crossprod(A, B) , A T A 可以表示为 crossprod(A)。要注意的是,crossprod() 的结果总是矩阵,所以计算 两个向量的内积用 sum(x,y) 而不用 crossprod(x,y)
如:
sum(A,B)
crossprod(A,B)

返回:

10.5 外积

R 向量支持外积运算,记为 %o% , 结果为矩阵。 x %o% y 的第 i 行第 j 列元素等于 x[i] 乘以 y[j] 。如
c(1,2,3) %o% c(1, -1) 

返回:

 

这种运算还可以推广到 x 的每一元素与 y 的每一元素进行其它的某种运算,而不限于乘积运算,可以用 outer(x,y,f) 完成,其中 f 是某种运算,或者接受两个自变量的函数。

10.6 逆矩阵与线性方程组求解

solve(A) A 的逆矩阵,如

solve(A) 
solve(B)

返回:

solve(A,b) 求解线性方程组 Ax = b 中的 x ,
求解线性方程组

B

返回:

solve(B, c(1,2))

返回:

10.7 apply() 函数

apply(A, 2, FUN) 把矩阵 A 的每一列分别输入到函数 FUN 中,得到对应于每一列的结果,如
D <- matrix(c(6,2,3,5,4,1), nrow=3, ncol=2); D

返回:

apply(D, 2, sum)

返回:

apply(A, 1, FUN) 把矩阵 A 的每一行分别输入到函数 FUN 中,得到与每一行对应的结果,如
apply(D, 1, mean)

返回:

如果函数 FUN 返回多个结果,则 apply(A, 2, FUN) 结果为矩阵,矩阵的每一列是输入矩阵相应列输入到 FUN 的结果,结果列数等于 A 的列数。如
apply(D, 2, range)

返回:

如果函数 FUN 返回多个结果,为了对每行计算 FUN 的结果,结果存入一个与输入的矩阵行数相同的矩阵,应该用 t(apply(A, 1, FUN)) 的形式,如
t(apply(D, 1, range))

返回:

10.8 多维数组

矩阵是多维数组 (array) 的特例。矩阵是 x ij , i = 1 , 2 , . . . , n, j = 1 , 2 , . . . , m 这样的两下标数据的存贮格式,三维数组是 x ijk , i = 1 , 2 , . . . , n, j = 1, 2 , . . . , m, k = 1 , 2 , . . . , p 这样的三下标数据的存贮格式, s 维数组则是有 s 个下标的数据的存贮格式。实际上,给一个向量添加一个 dim 属性就可以把它 变成多维数组。
多维数组的一般定义语法为
        数组名 <- array( 数组元素 ,
                dim=c(第一下标个数, 第二下标个数 , ..., s 下标个数 ))
其中数组元素的填入次序是第一下标变化最快,第二下标次之,最后一个下标 是变化最慢的。这种次序称为 FORTRAN 次序。
下面是一个三维数组定义例子。
ara <- array(1:24, dim=c(2,3,4)); ara

返回:

这样的数组保存了 x ijk , i = 1 , 2 , j = 1 , 2 , 3 , k = 1 , 2 , 3 , 4 。三维数组 ara 可以看成是 4 2 × 3 矩阵。取出其中一个如 ara[,,2] ( 取出第二个矩阵 )
ara[,,2]

返回:

多维数组可以利用下标进行一般的子集操作,比如 ara[,2, 2:3] x ijk , i = 1, 2 , j = 2 , k = 2 , 3 的值,结果是一个 2 × 2 矩阵 :
ara[,2,2:3]

返回:

多维数组在取子集时如果某一维下标是标量,则结果维数会减少,可以在方括号内用 drop=FALSE 选项避免这样的规则发生作用。
类似于矩阵,多维数组可以用一个矩阵作为下标,如果是三维数组,矩阵就需要有 3 列,四维数组需要用 4 列矩阵。下标矩阵的每行对应于一个数组元素。
R语言笔记三:矩阵数组、列表数据框 1.矩阵        矩阵是二维的,需要有行列。向量是一维的。        在R软件中,矩阵是有维数的向量,这里的矩阵元素可以是数值型、字符型或者逻辑型,但是每个元素必须拥有相同的模式,这个向量一致。 (1)创建矩阵: m <- matrix(1:20,4,5) 行数列数的分配必须满足分配条件。若分配的行列过大,分配的元素不足够,则报错。 m <- 阅读详情

相关推荐

R语言中指定变换为行内容的参数

通过设置byrow参数为TRUE,我们可以指定R语言中的数据变换为行内容。在R语言中,可以使用参数来指定将数据变换为行内容的方式。byrow参数用于指定数据在变换时按行排列。默认情况下,数据是按列排列的,即每列为一个观测值。通过设置byrow为TRUE,我们可以将数据按行排列,使每行成为一个观测值。,byrow参数也可以在其他一些函数中使用,以实现数据变换为行内容的目的。当byrow参数未设置或设置为FALSE时,数据按列排列。函数创建了一个数据框,并通过设置byrow参数为TRUE,将数据按行排列。

TechSavant的博客 912

Julia矩阵中根据行名列名提取子矩阵

R语言中, 矩阵可以设置行名列名, 然后根据行名列名进行提取. R语言代码: R_test = matrix(1:16,4,4) colnames(R_test) = rownames(R_test) = c("A","B","C","D") R_test id2 = c("B","C") R_test[id2,id2] 结果如下: &gt; R_test = matrix

邓飞----育种数据分析之放飞自我 3469

按行顺序排布图的R语言参数——byrow

通过设置"byrow"参数为"TRUE",我们可以确保数据在图形中按照行顺序排列。本文将详细介绍如何使用"byrow"参数来创建按行顺序排布的图形,并提供相应的源代码。接下来,我们将使用一个示例数据集来说明如何使用"byrow"参数。假设我们有一个包含6个元素的向量,我们希望将这些元素按照行顺序排布成2行3列的矩阵,并将其可视化为一个图形。通过使用"byrow"参数,我们可以轻松地按照行顺序排布数据并创建相应的图形。运行上述代码后,将生成一个按行顺序排布的矩阵图形,其中各个元素根据我们指定的颜色进行填充。

2301_79326891的博客 1077

R matrix 取子集

1,根据行名、列名取子集 test <- matrix(rnorm(20), ncol = 4) rownames(test) <- LETTERS[1:5] colnames(test) <- letters[1:4] test 输出为 a b c d A 1.62977061 -0.21727021 1.41091...

linkequa的博客 1414

R语言中与矩阵相关的所有操作 ()

来源 | R友舍16 矩阵的行、列、行平均与列平均在R中很容易求得一个矩阵的各行的、平均数与列的、平均数,例如:> A[,1] [,2] [...

R语言中文社区 5348

R语言系列1——R语言基础入门

R语言,作为一种统计分析图形表示的强大工具,自20世纪90年代初问世以来,已广泛应用于数据分析、生物信息学、统计学习以及金融领域等多个方面。它不仅拥有强大的数据处理能力,还拥有丰富的包库支持,能够满足各种统计分析的需求。

theskylife的博客 9121

R语言入门 Chapter02 | 矩阵数组

不登高山,不知天之高也;不临深溪,不知地之厚也。 ——荀子 这篇文章讲述的是R语言中关于矩阵数组的相关知识。希望这篇R语言文章对您有所帮助!如果您有想学习的知识或建议,可以给作者留言~ Chapter02 | 矩阵数组1、创建矩阵2、创建数组3、通过索引访问矩阵4、通过名称访问矩阵5、矩阵的运算6、添加 同时推荐前面作者另外三个专栏的文章: 快速入门之Tableau系列:快速入门之T...

不温卜火 5028

R语言基础入门(全)

R 是门语言,也是个环境。个人认为R有点像matlab。 R自带多种统计学及数字分析功能。R的功能也可以通过安装包(Packages,用户撰写的功能)增强,个人感觉这个就是插件。因为S的血缘,R比其他统计学或数学专用的编程语言有更强的面向对象(面向对象程序设计)功能。R的另一强项是绘图功能,制图具有印刷的质素,也可加入数学符号。虽然R主要用于统计分析或者开发统计相关的软件,但也有人用作矩阵

utnewbear的专栏 3万+

R语言中与矩阵相关的所有操作()

主要包括以下内容:创建矩阵向量;矩阵加减,乘积;矩阵的逆;行列式的值;特征值与特征向量;QR分解;奇异值分解;广义逆;backsolve与fowardsolve函数;取矩...

R语言中文社区 1万+

R语言实战:使用colnames函数修改dataframe列名称

本文介绍了如何使用colnames函数来修改R语言中数据框的列名称。通过简单的几步,我们可以将数据框的列名称修改为更加易读清晰的形式。当需要对数据框进行分析可视化时,良好的列名称可以提升工作效率结果的解释性。有时候,我们需要修改数据框的列名称以使其更加清晰易读。除了使用colnames函数,我们还可以使用索引方式直接修改数据框的列名称。接下来,我们将使用colnames函数来修改数据框的列名称。首先,让我们创建一个示例数据框,以便演示如何修改列名称。步骤2:使用colnames函数修改列名称。

2301_79330511的博客 1408

R语言 矩阵索引

矩阵索引 由于矩阵是管理二维数据的,所以使用两个下标便可以表示矩阵中的元素 矩阵索引与向量索引类似,也是使用下标方括号来选择矩阵中的行、列或者元素 矩阵索引 x[i,j] 下标为(i,j)的元素 x[i, ] 第i行 x[ ,j] 第j列 x[c(m,n), ] 第mn行 x[ ,c(m,n)] 第mn列 x[c(m:n), ] 第m到n行 x[ ,...

张恒华的博客 1万+

R学习 第二篇:矩阵数组

向量是一维的,只有行这一个维度,没有其他维度。R可以创建更高维度的数据对象,例如,矩阵、数据框、数组,索引高维度的对象时,需要使用元素的下标。这些对象的下标都使用中括号[]索引,第一个维度是row,第二个维度是column,维度依次增加,索引的格式是:var[row,column,,,]。数组是二维或多维(三维或多于三维),二维数组叫做矩阵数组元素的类型是相同的,每个维度的元素数量是...

albh81462的博客 196

MATLAB矩阵运算

常用的函数: eye(size(A)) 产生与A矩阵同阶的单位矩阵 zeros(m,n) 产生0矩阵 ones(m,n) 产生幺矩阵 rand(m,n) 产生随机元素的矩阵 randn(m,n) 产生均值为0,方差为1的标准正态随机矩阵 size(A) 返回包含两个元素的向量 length(x) 返回向量的长度 diag(X) 1、若X是矩阵,则diag(X)是X的主对角线向量 ...

策马奔腾向前冲 656

R函数-diag()

diag()提取或替换一个矩阵的对角线,或构造一个对角矩阵。 语法: diag(x = 1, nrow, ncol) diag(x) <- value 解析: x:一个矩阵,向量或一维数组,或不填写。 nrow, ncol:可选 行列。 value :对角线的值,可以是一个值或一个向量。例子> x <- matrix(1:16,nrow=4,ncol=4) > x [,1]

lili_wuwu的博客 2万+

R语言数据结构介绍-入门

R语言中用于存储数据的结构包括向量、矩阵数组、数据框列表,这五种结构之间联系紧密。在R语言中查看数据格式的函数为str()。 1.向量     向量用 c() 创建,可以被用于存储数值型、字符型或逻辑型数据,但单个向量中只能存在一种数据类型,如 a 2.矩阵     不同于向量的一维结构(仅含一行),矩阵为二维结构,由行列组成,相当于一个表格。但矩阵同样只能存储一种 数据

wshsa的博客 2979

R中常用数据结构

R中常用数据结构 一:矩阵函数 mymatrix 矩阵是二维的,格式需要统一,即每个模式都需要有相同模式,要么是数值型,要么是字符型,要么是逻辑型 mymatrix<-matrix(cells,nrow=2,ncol=2,byrow=TRUE, dimnames=list(rnames,cnames)) cells:矩阵的元素(矩阵包含的数据) nrow:行维数(矩阵有几行) ncol:...

qq_38333578的博客 1591

R语言中byrow参数的作用

在 R 语言中,byrow参数主要用于矩阵数据框的创建过程,它决定了数据填充的方向。

qq_45645949的博客 778
上一篇: MySQL从入门到精通详细教程
下一篇: 变异系数法之matlab
洋洋菜鸟
博客等级 码龄12年 2125粉丝 · 290原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值