今天是2017年9月20号,4年前的今天,我开始了一段奇妙的旅程。I love you,honey
继续Numpy的话题,在前4期中讲了使用Numpy进行创建array,然后进行一些数学运算、基本操作之后,今天来看array的合并与分割。
合并:
Numpy中使用vstack, hstack, newaxis, concatenate进行相关操作。接下来看一些例子:
vstack
从上图中可以看出vstack需要的输入是一个元组,因此我用元组的形式将需要合并的两个array输入进去。vstack看名字就可以知道他是垂直合并,因此结果如下边两图:
hstack
和vstack一样,hstack也很好理解了。
concatenate
concatenate通过axis这个参数来控制横向或者竖向合并,当axis=0时,表示的是竖向合并。
axis=1就是横向合并。
newaxis
看前边的内容,不知道你们有没有发现什么,在stack和concatenate两个的截图中,A和B两个array的定义有所不同。可以返回去看一下。
原因是之前[1 2 3]
这样的定义,它的shape是(3,)而不是(1, 3),可以认为它只是一个list而已,而不是我们所能操作的array。
为了把它变成array,在[1 2 3]
基础上,我们可以做的是给它增加维度。newaxis这个函数的字面意思就是新的轴,就是新增加一个维度。接下来看看怎么用:
具体是怎么回事呢,可以这样理解(以下理解不是官方解释,是我个人的想法,可能不对,但是很好记):
A[]
就是我要对A进行操作,具体操作被,
分成了两个部分,在,
之前我们使用了newaxis,,
之后是一个:
,:
可以看做是原有的shape不变,我们在原有的shape之前加了一个新轴。原来是(3,),在3之前加一轴,就变成了(1, 3),结果如下:
果然变成了(1,3)的array。
同理,如果写的是A[:,np.newaxis]
,结果就会输出(3,1)的array。
分割:
numpy使用split进行array的分割,需要输入三个参数,第一个是需要分割的array,第二个是分割的块数,第三个是按哪个轴进行分割。
注意这个分割是平均分,如果这个array有6行,分成2块3块都可以,但是分成4块就会报错。如果需要这种不平均的分割,需要使用的是np.array_split
函数来操作。
轴这个参数和上边讲的一样,为0时按照列的方向来分,为1时按照行的方向来分。
如果无法分清axis,我个人觉得axis是个很难理解的概念。。。
可以用np.vsplit
和np.hsplit
来分别代替axis=0和axis=1的np.split