首页 > 编程语言 > 详细

R语言编程艺术# 矩阵(matrix)和数组(array)

时间:2017-01-10 08:01:20      阅读:448      评论:0      收藏:0      [点我收藏+]

矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数。所以矩阵也是和向量一样,有模式(数据类型)的概念。(但反过来,向量却不能看作是只有一列或一行的矩阵。

数组(array)是R里更一般的对象,矩阵是数组的一个特殊情形。数组可以是多维的。例如:一个三维数组可以包含行、列和层(layer),而一个矩阵只有行和列两个维度

 1、创建矩阵

矩阵的行和列的下标都是从1开始,如:矩阵a左上角的元素记作a[1,1]。矩阵在R中是按列存储的,也就是说先存储第一列,再存储第二列,以此类推。

> y <- matrix(c(1,2,3,4),nrow=2,ncol=2)
> y
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> y <- matrix(c(1,2,3,4),nrow=2)
> y
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> #按列输出
> y[,2]  #输出第二列
[1] 3 4
> 

为矩阵中的元素赋值

> y <- matrix(nrow = 2,ncol = 2)
> y
     [,1] [,2]
[1,]   NA   NA
[2,]   NA   NA
> y[1,1] <- 1
> y[2,1] <- 2
> y[1,2] <- 3
> y[2,2] <-4
> y
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> 
>#与上面的代码效果相同
> y <- matrix(c(1,2,3,4),nrow = 2)
> y
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> 

默认在R中矩阵是以列进行存储的,但通过byrow = T,参数可以将矩阵进行按行存储

> y <- matrix(c(1,2,3,4),nrow = 2, byrow = T)
> y
     [,1] [,2]
[1,]    1    2
[2,]    3    4
> 

2、一般矩阵运算

常用的矩阵运算:线性代数运算、矩阵索引、矩阵元素筛选

   #线性代数运算

线性代数运算包括:矩阵相乘、矩阵数量乘法、矩阵加法等

> y <- matrix(c(1,2,3,4),nrow = 2)
> y
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> y %*% y #矩阵相乘
     [,1] [,2]
[1,]    7   15
[2,]   10   22
> 3*y     #矩阵数量乘法
     [,1] [,2]
[1,]    3    9
[2,]    6   12
> y+y     #矩阵加法
     [,1] [,2]
[1,]    2    6
[2,]    4    8
> 

  #矩阵索引

> z <- matrix(c(1,2,3,4,1,1,0,0,1,0,1,0),nrow = 4)
> z
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    1    0
[3,]    3    0    1
[4,]    4    0    0
> z[,2:3]    #提取z中第2、3更
     [,1] [,2]
[1,]    1    1
[2,]    1    0
[3,]    0    1
[4,]    0    0
> 

给矩阵赋值 

> z
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    1    0
[3,]    3    0    1
[4,]    4    0    0
> z[c(1,3),] <-matrix(c(1,1,8,12,16,20),nrow = 2)   #给z1,3行进行赋新值
> z
     [,1] [,2] [,3]
[1,]    1    8   16
[2,]    2    1    0
[3,]    1   12   20
[4,]    4    0    0
> 

利用行号负值,移除行或列

> y <- matrix(c(1,2,3,4,5,6),nrow = 3)
> y
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> y[-2,]      #移除第2行
     [,1] [,2]
[1,]    1    4
[2,]    3    6
> y[,-2]      #移除第2列
[1] 1 2 3
> 

  #矩阵元素筛选

矩阵跟向量样也可以进行筛选,只是语法上不同而已 

> x <-matrix(c(1,2,3,2,3,4),nrow = 3)
> x
     [,1] [,2]
[1,]    1    2
[2,]    2    3
[3,]    3    4
> x[x[,2]>=3,]   #x中第2列所有大于等于3的行
     [,1] [,2]
[1,]    2    3
[2,]    3    4
>

 矩阵筛选规则可以基于除被筛选变量这外的变量 

> x
     [,1] [,2]
[1,]    1    2
[2,]    2    3
[3,]    3    4
> z <- c(5,12,13)
> x[z %% 2 == 1,]
     [,1] [,2]
[1,]    1    2
[2,]    3    4
> 

运算符:& and && 前者是向量的逻辑“与”运算,后者是用于if语句的标量逻辑“与”运算

> m <- matrix(c(1,2,3,4,5,6),nrow = 3)
> m
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> m[m[,1]>1 & m[,2]>5]     #m中第1列中大于1,第2列中大于5的行
[1] 3 6
> 

  #扩展案例:生成协方差矩阵

n元正态分布,协方差矩阵有n行n列,要求n个随机变量方差都为1,每两个变量间的相关性都是rho,如:当n=3,rho=0.2时,需要的矩阵如下:  

                技术分享

> makecov <- function(rho,n){
m<-matrix(nrow = n,ncol = n)
m<-ifelse(row(m)==col(m),1,rho)
return(m)
}
> makecov(0.2,3)
     [,1] [,2] [,3]
[1,]  1.0  0.2  0.2
[2,]  0.2  1.0  0.2
[3,]  0.2  0.2  1.0
> 

3、对矩阵的行和列调用函数  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

R语言编程艺术# 矩阵(matrix)和数组(array)

原文:http://www.cnblogs.com/aipeli/p/6266954.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!