在上一篇的学习中,了解到,使用那些方法已经能够实现数组的变形了,numpy觉得我们不够,还允许我们使用下标操作完成变形。
我们定义了数组data,
我们发现c从一维变成了二维,从以前的切片知识可知,操作本质是对data进行切片,逗号前面部分,表示data0轴上的所有元素,
也就是data的全部元素,而逗号后面的元素表示1轴上的元素,在设置元素取值范围的时候,使用了np.newaxis,查看文档,
我们会发现np.newaxis是none。如果我们用none代替np.newaxis会是一样的效果吗?
结果显而易见,是一样的。我们刚才考虑到它是切片操作,那么它是不是与原数组共用一个视图那?
结果是,共用同一个视图。
我们把data变为二维数组的时候,将1轴设为None,将0轴设为None将会是什么样的操作呢?
符合我们的预期。
针对这种在切片中使用newaxis的方法,numpy提供了一个替代函数--np.expand_dims()。
函数是根据轴来调整数组的形状。
我们在numpy中,实现数组与数组的结合,以及针对一个数组进行分割,有几个非常好用的方法。
这些方法丰富了针对数组的操作方式。
水平组合
实现水平组合的函数形式是np.hstack(tup),其中tup是一个元组,包含几个即将被组合在一起的几个数组。
下面就演示一项:
假设实例为二维数组,要求其0轴方向的形状一样,而1轴的方向的形状可以不同。
此外,还有实现水平组合另外两种方法,一个是Np.stack,另一个是np.concatenate()。
垂直组合
实现垂直组合的专有函数为np.vstack()函数。
既然是垂直方向,就要求其1轴上形状相同。
学习的过程中发现,有转置操作:
但是元素的排列方法明显不同。
np.concatenate()在传入轴的参数后,也能实现垂直组合,与之前的操作等效。
除了以上两种的组合方式外,还有深度组合,行组合,列组合方式。
举例说明:
我们可以想象,a,b为两个平面,而b为a平面上元素乘以3而得到的数组。
进行结合的话,将有关系的元素组队,就会得到新的数组。
实现的是将两个一维数组结合,当操作的是二维数组,则效果等于垂直组合。
与组合相对的是切割操作。
np.split()的通用的函数形式为np.split(ary,indices_or_sections,axis=0)。
这里axis=1代表从1轴进行切割,分为2部分
这里我们将其切割为三部分。
同样我们可以改变切割的轴,当我们将切割轴设为0时:
当然,我们那也有专门的切割函数来进行分割:
np.hsplit(数组,分割数),np.vsplit(数组,分割数)。
我们不仅能组合切割元素,还能“改编”。
意思是不仅能修改数组中已有的元素,还能进行增加,删除等操作。
我们将b中的元素添加到a中。这里我们新建了一个数组r用来存放原来的数组。
如果不声明轴的话,将意味着知识用原来两个数组的元素组建一个新的一维数组。
除了追加外,我们还能插入,即某些元素插入到指定位置。
我们这里看到,不共用同一个视图。
我们还有一个删除的操作: