矩阵和数组也属于向量
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
}