R中的矩阵
矩阵是R编程中非常重要的概念,主要用于统计和数据操作。
向量是在单个维度上存储的一组值,而矩阵是在多个维度上存储的值的集合。
可以简单地将矩阵视为保存并可以一起操纵的多个向量。
R为此具有几个强大的功能。
在R编程中创建矩阵
矩阵的下标从1开始。
因此,[1,1]代表与第一行第一列对应的元素,[1,2]代表在第一行和第二列的元素,依此类推。
以下列方式创建R中的矩阵:
mymat <- matrix(c(2,4,6,8),ncol=2,nrow=2)
我们传递给矩阵创建的第一个参数是用于填充矩阵的值向量。
然后我们需要指定no。
列和行的数量,由ncol
和nrow
参数指示。
向量中的元素数量应始终等于" ncol * nrow"。
R默认情况下以第一列的方式存储矩阵,即,它填充第一列,然后从左到右移至下一列。
让我们显示上面创建的mymat矩阵。
> mymat [,1] [,2] [1,] 2 6 [2,] 4 8
要以行优先的方式填充矩阵,您需要为上述矩阵创建函数提供一个附加参数byrow = TRUE
。
> mymat <- matrix(c(2,4,6,8),ncol=2,nrow=2,byrow=TRUE) > mymat [,1] [,2] [1,] 2 4 [2,] 6 8
您还可以通过指定矩阵大小来预先创建一个矩阵,并在以后相应地填充它。
#Create space for matrix > xmat <-matrix(ncol=3,nrow=3) #Populate elements of the matrix > xmat[1,1]=5 > xmat[1,2]=10 > xmat[1,3]=15 > xmat[2,1]=20 > xmat[2,2]=25 > xmat[2,3]=30 > xmat[3,1]=35 > xmat[3,2]=40 > xmat[3,3]=45 > xmat [,1] [,2] [,3] [1,] 5 10 15 [2,] 20 25 30 [3,] 35 40 45
也可以为矩阵中的列和行分配名称。
这将有助于更好地记录数据集并消除混乱。
R中行和列的名称可以通过使用dimnames
参数的列表来提供。
假设我们希望创建一个矩阵来保存3个男孩的生命统计数据,其中包括年龄,身高和体重。
我们需要用行来表示每个男孩的名字,并用列来表示每个重要数据。
我们可以使用以下代码来做到这一点:
vitals <- matrix(c(7,90.8,45,8,75.5,37,10,100.1,50),ncol=3,nrow=3,byrow=TRUE, dimnames = list(c("Raj","Rahul","Ravi"),c("Age","Height","Weight")))
现在让我们显示矩阵。
> vitals Age Height Weight Raj 7 90.8 45 Rahul 8 75.5 37 Ravi 10 100.1 50
可以使用矩阵对象上的colnames()和rownames()函数来检索行和列的名称。
> colnames(vitals) [1] "Age" "Height" "Weight" > rownames(vitals) [1] "Raj" "Rahul" "Ravi"
也可以使用这些功能重新分配行和列的名称。
假设我们需要更改列名"高度"和"重量",以包含有关测量单位的更多信息,我们可以通过以下方式进行操作:
> colnames(vitals) <- c("Age", "Height in cm", "Weight in KG") > vitals Age Height in cm Weight in KG Raj 7 90.8 45 Rahul 8 75.5 37 Ravi 10 100.1 50
R编程中的矩阵运算
R中的矩阵支持基本的线性代数运算,例如加法,乘法(逐元素乘法和矩阵乘法)以及标量乘法。
矩阵加法非常简单,需要两个操作数矩阵都具有相同的维数。
> x<-matrix(c(3,4,5,2,6,7,8,9,11),ncol=3,nrow=3) > y<-matrix(c(3,2,6,7,8,22,1,54,10),ncol=3,nrow=3) > x [,1] [,2] [,3] [1,] 3 2 8 [2,] 4 6 9 [3,] 5 7 11 > y [,1] [,2] [,3] [1,] 3 7 1 [2,] 2 8 54 [3,] 6 22 10 > x+y [,1] [,2] [,3] [1,] 6 9 9 [2,] 6 14 63 [3,] 11 29 21
对于逐元素乘法,我们需要两个矩阵具有相同的维数,而对于m x n与p x q矩阵的矩阵乘法,n和p应该始终相同。
这两个示例如下所示。
使用" "符号指定逐元素乘法和标量乘法,使用"%%"符号指定矩阵乘法。
> x*y [,1] [,2] [,3] [1,] 9 14 8 [2,] 8 48 486 [3,] 30 154 110 > x*2 [,1] [,2] [,3] [1,] 6 4 16 [2,] 8 12 18 [3,] 10 14 22 > x%*%y [,1] [,2] [,3] [1,] 61 213 191 [2,] 78 274 418 [3,] 95 333 493
下一篇有关矩阵代数的文章将介绍一些更高级的矩阵运算。
R语言中的索引矩阵
在上一篇文章中,我们已经看到了索引向量和提取子集的过程。
矩阵索引的工作方式如下所示。
负下标用于排除特定的行或者列。
#Defined matrix x > x [,1] [,2] [,3] [1,] 3 2 8 [2,] 4 6 9 [3,] 5 7 11 #Display only the first row > x[1,] [1] 3 2 8 #Display only the first column > x[,1] [1] 3 4 5 #Display the rows 1 to 2 > x[1:2,] [,1] [,2] [,3] [1,] 3 2 8 [2,] 4 6 9 #Display the columns 2 to 3 > x[,2:3] [,1] [,2] [1,] 2 8 [2,] 6 9 [3,] 7 11 #Display all rows except the second > x[-2,] [,1] [,2] [,3] [1,] 3 2 8 [2,] 5 7 11
您还可以通过以下方式用新值重新分配这些子矩阵。
第2列和第3列均更改为指定的新值。
> x[,2:3] <- matrix(c(2,2,2,2,2,2),ncol=2) > x [,1] [,2] [,3] [1,] 3 2 2 [2,] 4 2 2 [3,] 5 2 2