专栏首页机器学习与统计学温故知新--R基础知识(下)

温故知新--R基础知识(下)

一、 数组

数组可以看作是带有多个下标类型相同的元素集合。 维度向量(dimension vector)是一个正整数向量。如果它的长度为k,那么该数组就是k-维的。

向量只有在定义了dim属性后才能作为数组在R中使用。 假定,z是一个含1500个元素的向量

> z<-seq(1,1500) > dim(z)<- c(3,5,100) >attributes(z) $dim [1] 3 5100

对dim属性的赋值使得该向量成一个3×5×100的数组。

1.数组索引

数组元素可以通过给定数组名及其后方括号中用逗号隔开的下标访问。可以根据索引数组去给数组中不规则的元素集合赋值或者将数组中特定的元素返回到一个向量中。

2.array()

除了用设定一个向量dim属性的方法来构建数组,它还可直接通过函数array将向量转换得到。

假定向量h有24个或更少的数值,那么命令

> h <- seq(1,24) > Z <-array(h, dim=c(3,4,2))

等价于

> dim(h)<- c(3,4,2)

3.向量和数组混合运算

· 表达式运算是从左到右进行的。

· 短的向量操作数将会被循环使用以达到其他操作数的长度。

· 有且只有短的向量和数组在一起,数组必须有一样的属性dim,否则返回一个错误。

· 向量操作数比矩阵或者数组操作数长时会引起错误。

· 如果数组结构给定,同时也没有关于向量的错误信息和强制转换操作,结果将是一个和它的数组操作数属性dim一致的数组。

4.数组的外积

数组一个非常重要的运算就是外积运算(outerproduct)。如果a和b是两个数值数组,它们的外积将是这样的一个数组:维度向量通过连接两个操作数的维度向量得到;数据向量则由a的数据向量元素和b的数据向量元素的所有可能乘积得到。外积是通过特别的操作符%o%实现:

> a <- 1:3 > b <- 1:3 > ab <-a %o% b > ab <-outer(a, b,"*") > ab [,1] [,2] [,3] [1,] 1 2 3 [2,] 2 4 6 [3,] 3 6 9

命令中的乘法操作符可以被任意一个双变量函数代替。

> x<-c(1,2,3);y<-c(2,3,4) > f <- function(x, y)cos(y)/(1 + x^2) > z <- outer(x, y, f)

两个常规向量的外积是一个双下标的数组(就是矩阵,最大秩为1)。

5.数组的广义转置

函数aperm(a, perm) 可以用来重排一个数组a

B <- aperm(z,c(2,1))

等价操作

t(z)

二、矩阵

矩阵是一个双下标的数组。R包括许多只对矩阵操作的操作符和函数。例如上面提到的t(X)就是矩阵的转置函数。函数nrow(A)和ncol(A)将会分别返回矩阵A的行数和列数。

1.矩阵相乘

操作符%*% 用于矩阵相乘。 如果A和B是大小一样的方阵,那么

A * B

将是一个对应元素乘积的矩阵,而

A %*% B

则是一个矩阵积。如果x是一个向量,那么

x %*% A %*% x

通过上述数组外积中的z和x试试下列代码:

> z * z > z %*% z > x %*% z%*% x

crossprod():可以完成"矢积"运算,也就是说crossprod(X,y) 和t(X) %*% y 等价,而且在运算上更为高效。 diag():返回以该向量元素为对角元素的对角矩阵。

2.解线性方程和求逆

求解线性方程组是矩阵乘法的逆运算。当下面的命令运行后,

b <- A %*% x

如果仅仅给出A和b,那么x就是该线性方程组的根。在R里面,用命令

solve(A,b)

矩阵的逆可以用下面的命令计算

solve(A)

三、小结

R语言中数组可以看作是带有多个下标类型相同的元素集合。 维度向量(dimensionvector)是一个正整数向量。如果它的长度为k,那么该数组就是k-维的。向量只有在定义了dim属性后才能作为数组在R中使用。除了用设定一个向量dim属性的方法来构建数组,它还可直接通过函数array将向量转换得到,outer()可以做外积运算,aperm()可以做数组的广义转置,等价于t(),%%可以做矩阵的相乘,crossprod()可以完成"矢积"运算,也就是crossprod(X,y)和t(X) %% y 等价,而且在运算上更为高效,diag()返回以该向量元素为对角元素的对角矩阵,使用solve()可以对矩阵求逆。

本文分享自微信公众号 - 机器学习与统计学(tjxj666)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-09-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • R语言之可视化(23)高亮某一元素

    总结:假如需要高亮ggplot2中的某一元素时,首先需要新建一列,然后修改新建列中需要高亮的部分即可

    用户1359560
  • R语言之可视化(22)绘制堆积条形图

    经过这张图,我们可以初步得到的信息是:(1)T1到T4各个分期的患者总数(2)T1期男性患者的数目,T1女性患者的数目(3)其他分期男性或者女性的患者数目。

    用户1359560
  • R语言读入数据库的中英名词互译测试并计分脚本(考试用)

        1. 分子生物学中英文.csv,输入文件,两列,以tab键分隔的txt文本,没有列名

    用户1680321
  • 奇怪的编码问题

    今天使用R爬取数据的时候发现一个奇怪的问题,我将每个属性的数据先保存在vector中,然后再合并到data.frame中时,发现打印names时数据正常显示中文...

    用户2936342
  • 经验分享 | 如何写好数据分析师简历?

    我们要确定怎么样简历是一份好数据分析师简历呢?那我们就要涉及到如何评价一个好数据分析师?一般来说,优秀的数据分析师有着很好的表达能力,能通过在二分钟对自己工作内...

    用户2769421
  • R语言之可视化(21)令人眼前一亮的颜色包

    用户1359560
  • Python与PHP的对决:谁是工程师最喜欢和最讨厌的语言?

    为了弄清楚雇主对哪些编程技能最感兴趣,Hired 研究了求职者在到六周内收到的面试邀请数量。如下图显示,谷歌的 Go 语言是雇主最需要的编程语言技能,可能因为这...

    机器之心
  • 2019年需要关注的区块链智能合约开发平台

    智能合约开发语言已经被Solidity统治了一段时间,它用于开发可以在以太坊虚拟机EVM上运行的智能合约。不过Solidity有一些严重的问题,包括算术溢出、类...

    用户1408045
  • 线性代数--MIT18.06(三)

    ,我们依然可以使用矩阵消元的形式来求解,只不过要比我们之前提到的矩阵消元多做一些消元而已,这就是Gauss-Jordan法。

    fireWang
  • R语言第二章数据处理(9)数据合并

    =========================================

    用户1359560

扫码关注云+社区

领取腾讯云代金券