我们继续来看一些数组的基础应用。
1 数组切片
什么是数组切片?简单的说,就是截取数组的一部分。假设有一数组a,其切片的语法如下:
a[起始位置:终止位置:步长]
起始和终止位置都很好理解,步长就是说你每隔几个取一个。注意,这3个参数都是可以省略的,如果3个参数同时省略,意味着切片是从开始到末尾,取所有元素,步长为1。
我们来看几个例子:
可以看到,切片数组是含左不含右,也就是包含起始位置,不包含终止位置。
有时,步长也可能成为负数,此时会将数组倒序排列:
对于多维数组也是一样的,用逗号分开即可:
最后还有一点要注意的是,数组切片返回的是数组的视图,不是数组的副本。这就是说数组切片元素被修改后,原数组中的元素也会更改:
那如何创建数组切片的副本呢?用copy()方法即可实现:
可以看到,在我们创建副本后对数组切片再进行修改,原数组并不会受到影响。
2 数组变形
一种常见的情况是将一维的数组变形成更高维的数组。例如,我们想将1-8变成2*4的矩阵,可以用reshape()来实现:
还有一种常见的变换是将一维数组变成二维的行或列,可以用newaxis来实现:
如上图,我们将1维的数组变成1*4的二维数组。其效果等同于reshape(1,4):
同样,我们也可以变成4*1的二维数组:
其效果等同于reshape(4,1)。
3 数组的合并和分割
合并
我们有2个数组c和d(c为上图中数组),现在将2者合并为一个数组:
可以看到,结果是水平方向上的拼接。
如果想换成垂直方向的合并,可以用vstack来实现:
水平方向上的合并,也可以用hstack来实现:
分割
分隔就是合并的逆过程,如下图,我们将d数组分割成3部分:
可以看到,我们使用split来进行分割,其参数有2个。第一个为分割的数组对象,第二个为分割点,注意分割点位置处的元素属于右边部分,即含右不含左,n个分割点会得到n+1个部分。
与合并对应,分割也有hsplit和vsplit:
vsplit只有在2维及以上的数组中才可使用,我们创建一个e数组:
可以看到,我们将4*4的数组e按垂直方向分成2部分,分割点在第4行,第一部分3行,第二部分1行。
好了,数组的一些基础应用基本就介绍完了,下面会分享一些稍微复杂的数组计算相关的内容,敬请期待。
领取专属 10元无门槛券
私享最新 技术干货