R语言编程艺术读书笔记3----矩阵和数组(1)

来源:互联网 发布:做笔记的软件 知乎 编辑:程序博客网 时间:2024/05/20 16:11

矩阵和数组也属于向量

1、创建矩阵

matrix(c,nrow,ncol,byrow)函数创建矩阵:

参数详解:

c: 可选  向量 用于填充矩阵的值 不填充时默认NA 

exp:x <- matrix(nrow=2,ncol=2) 

输出:

NA NA

NA NA

nrow:可选 行数 指定矩阵行数

exp:x <- matrix(c(1,3,5,7),nrow=2) #矩阵默认按列填充

输出:

1 5

3 7

ncol:可选 列数 指定矩阵列数

exp: x <- matrix(c(2,4,6,8,10,12),ncol=3) #矩阵默认按列填充

输出:

2 8

4 10

6 12

byrow:可选 按行填充矩阵(不改变矩阵实际存储方式 矩阵依然按列存储)

exp:y <- matrix(c(1,3,5,7,9,11),nrow=3,ncol=2,byrow=T) #T代表TRUE 默认FALSE 不需要显示声明

输出:

1 3

5 7

9 11

也可以先创建空矩阵然后赋值填充

exp:x <- matrix(nrow=2,ncol=2)

x[1,1]=0

x[2,1]=1

x[1,2]=2

x[2,2]=3

输出:

0 2

1 3

2、矩阵常规操作

线性代数运算

exp:

y <- matrix(c(1,2,3,4),nrow=2)

y%*%y(矩阵乘法)

输出:

7 15

10 22 

5*y(矩阵数量乘法)

输出:

5 15

10 20


y+y(矩阵加法)

输出:

2 6

4 8

矩阵索引 exp:y[2:3,]第2、3行 ;y[,2:4]第2、3、4列 ;y[1:2,3]第1、2行的第3列

可以使用如上索引对矩阵赋值 也可以将矩阵赋值给一个矩阵索引区域

负数索引表示排除掉某一行或某一列 同向量 exp:y[-2,]除第二行之外


案例:图像操作

Code:

library(pixmap) #加载pixmap包

mtrush1 <- read.pnm("mtrush1.pgm") #读取图片

plot(mtrush1) #画图

【注】pixmap类属于S4类 使用@符引用元素(组件) ;S3类使用$符引用元素

locator()函数返回用户点击位置的坐标

#白色覆盖

mtrush2 <- mtrush1

mtrush2@grey[84:163,135:177] <- 1

plot(mtrush2)

#马赛克

blurpart <- function(img,rows,cols,q) {

lrows <- length(rows)

lcols <- length(cols)

newimg <- img

randomnoise <- matrix(nrow=lrows,ncol=lcols,runif(lrows*lcols)) #生成lrows*lcols个均匀分布的随机数并填充到lrows行lcols列的矩阵中

newimg@grey <- (1-q) * img@grey + q * randomnoise #生成一个马赛克图

return(newimg)

}

mtrush3 <- blurpart(mtrush1,84:163,135:177,0.65)

plot(mtrush3)


矩阵筛选:x(expr) 在索引中使用条件表达式 exp:x <- x[x[,2] >= 3,] 表示x矩阵中第2列大于3的元素


案例:生成协方差矩阵

Code:

makecov <- function(rho,n) { #rho 斯皮尔曼等级相关系数 希腊字母ρ

m <- matrix(nrow=n,ncol=n)#生成一个n行n列的矩阵

m <- ifelse(row(m) == col(m),1,rho) #row()函数返回矩阵元素的行号 col()函数返回矩阵元素的列号 意思就是行号等于列号返回1 也就是矩阵的对角线处返回1

return m

}


原创粉丝点击