“ 矩阵是可以看作一种特殊的向量的,它比向量多了两个附加属性,行数和列数,因此让它的复杂程度获得了提高。”
向量作为R中的一种非常基础的数据类型,大家通过过去的学习一定已经彻底的掌握了。但是,这个世界上的数据是复杂多变的,我们只使用向量是无法表示更加复杂的数据情况。
我们在线性代数课上学过一种数学概念,矩阵。这个概念在为了统计学家开发的R语言中同样适用,并且只需要在基础环境中,我们可以具有很多对矩阵的操作方法。
(由于R其实处理数据框较多,矩阵并不会讲很多的东西,如果非要使用矩阵,我其实还是更推荐去隔壁Python学习np和scipy)
创建矩阵
任何数据类型学习的开始都是如何得到它,也就是如何创建它。矩阵也不例外,我们首要的创建方式就是直接使用matrix函数进行创建。而且其实说是创建矩阵,我们其实是在把一个向量转化为矩阵,
# 创建矩阵
m1 <- matrix(1:9,
nrow = 3,
ncol = 3)
m1
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
上面就是最基本的创建矩阵的方法了。我们需要给matrix一个向量(其实矩阵也可以,不过就会让你产生一些奇奇怪怪的误导,后面讲解了矩阵转向量的时候你就明白了),这个向量的内容就会成为创建的矩阵的内容。
然后跟着需要指定你想创建的行数或者列数,这两个只需要指定其一即可,R会给我们计算另一个数字是几的,这样,我们就创建好了一个矩阵。
但是我们可以发现一个问题,我们创建的矩阵是竖着一排排放的,这个叫做,****列优先原则,我们也可以通过指定参数byrow,来让矩阵变成行优先的
> m11 <- matrix(1:9,
+ nrow = 3,
+ byrow = T)
> m11
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
>
这就是行优先矩阵了,存储的内容都是一样的,就是行列优先顺序不同。
到这里你可能就会问了,R是不是只能创建方阵呢,普通的矩阵能不能创建呢?那当然可以了
> m2 <- matrix(1:10,nrow = 5)
> m2
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10
我本人是习惯列优先进行存储的,所以我一般不指定byrow参数。
矩阵的索引
任何一种数据类型,我们对它最优先的操作学习,都是索引操作。任何一种结构的数据,我们存储它的目的都是为了使用,所以学习如果取到它的值,是非常重要的事情。
对矩阵的基本索引方式和向量非常相似,如果不了解向量的直接索引,布尔索引和连续索引,请看
向量的索引方式
onlybugs,公众号:轻松玩转生信R语言系列2 | 变量类型1-向量1
由于有了上面的基础,所以我们先索引点简单的,然后做两个不一样的案例。矩阵和向量最大的区别再与矩阵具有两个维度,索引的时候需要两个位置
# 最简单的索引方法 取位置 1 1
> m1[1,1]
[1] 1
# 取第一行和第二行的第三列的值
> m1[c(1,2),3]
[1] 7 8
# 取第一行的所有列
> m1[1,]
[1] 1 4 7
这里停一下,我们取第一行的所有列就已经是不同了,要注意,当我们想取某一行的所有列,或者某列的所有行,或者当你想取所有的时候,把位置空出来,R就会自动给你取到所有。
说完了上面的,下面就都非常简单了
# 取一二行的所有列
> m1[c(1,2),]
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
# 取第一行和第三行的所有列
> m1[c(T,F,T),]
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 3 6 9
# 取前两行和后两列位置的值
> m1[c(T,T,F),c(2,3)]
[,1] [,2]
[1,] 4 7
[2,] 5 8
大家尤其要注意最后一种,取前两行和后两列的操作,很多时候这是非常有用的步骤,会减少你使用循环,提高程序的运行速度。
改变矩阵的行和列
讲解完了索引,我们来讲一下如何矩阵的内容以及删除矩阵的行列。
其实修改特定位置的值非常简单,我们都已经找到了,修改就是一瞬间的事情,
> m1[1,1] = 11
> m1
[,1] [,2] [,3]
[1,] 11 4 7
[2,] 2 5 8
[3,] 3 6 9
除了单个值的修改,我们还可以对索引到的行和列进行修改,一般来说,我们会直接把要修改的结果放进向量中,然后进行修改,但是如果修改的值不够长,也是可以操作的,如下
> m1[1,] = 1
> m1
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 2 5 8
[3,] 3 6 9
如果你对上面的内容表示有些困惑,那么你应该回忆一下,
循环补齐机制
onlybugs,公众号:轻松玩转生信R语言系列3 | 变量类型2-向量2
这里有着你需要了解的一切。
最后讲解如何删除矩阵的行列,这里的操作也和向量是一样的,具体请回顾
向量的增删改
onlybugs,公众号:轻松玩转生信R语言系列2 | 变量类型1-向量1
> m1[-1,]
[,1] [,2] [,3]
[1,] 2 5 8
[2,] 3 6 9
> m1[,-3]
[,1] [,2]
[1,] 1 1
[2,] 2 5
[3,] 3 6
本文的全部内容就到此结束了,这篇文章讲解了最最基本的矩阵创建方法,以及对矩阵进行索引的操作,加上修改矩阵元素和删除矩阵的列等等,这些都是使用矩阵的基础知识,需要彻底掌握,才能在矩阵的使用中得心应手。
下一篇文章将会介绍矩阵维度,矩阵转化为向量以及矩阵的各种运算,矩阵的转置等内容。