【NumPy学习指南】day5 改变数组的维度

我们已经学习了怎样使用reshape函数,现在来学习一下怎样将数组展平。
(1) ravel 我们可以用ravel函数完成展平的操作:
In: b
Out:
array([[[ 0,1,2,3],
[ 4,5,6,7],
[ 8,9,10,11]],
[[12,13,14,15],
[16,17,18,19],
[20,21,22,23]]])
In: b.ravel()
Out:
array([ 0,3,4,7,8,11,12,15,16,
17,19,20,23])
(2) flatten 这个函数恰如其名,flatten就是展平的意思,与ravel函数功能相同。
不过,flatten函数会请求分配内存来保存结果,而ravel函数只是返回数组的一个视图(view):
In: b.flatten()
Out:
array([ 0,23])
(3) 用元组设置维度 除了可以使用reshape函数,我们也可以直接用一个正整数元组来设
置数组的维度,如下所示:
In: b.shape = (6,4)
In: b
Out:
array([ 0,11],
[12,23]],
正如你所看到的,这样的做法将直接改变所操作的数组,现在数组b成了一个6×4的多维数组。
(4) transpose 在线性代数中,转置矩阵是很常见的操作。对于多维数组,我们也可以这样做:
In: b.transpose()
Out:
array([[ 0,20],
[ 1,21],
[ 2,22],
[ 3,23]])
(5) resize resize和reshape函数功能一样,但resize会直接修改所操作的数组:
In: b.resize((2,12))
In: b
Out:
array([[ 0,23]])
刚才做了些什么
我们用ravel、flatten、reshape和resize函数对NumPy数组的维度进行了修改
动手实践:组合数组
首先,我们来创建一些数组:
In: a = arange(9).reshape(3,3)
In: a
Out:
array([[0,2],
[3,5],
[6,8]])
In: b = 2 * a
In: b
Out:
array([[ 0,4],
[ 6,10],16]])
(1) 水平组合 我们先从水平组合开始练习。将ndarray对象构成的元组作为参数,传给
hstack函数。如下所示:
In: hstack((a,b))
Out:
array([[ 0,16]])
我们也可以用concatenate函数来实现同样的效果,如下所示:
In: concatenate((a,b),axis=1)
Out:
array([[ 0,16]])

(2) 垂直组合 垂直组合同样需要构造一个元组作为参数,只不过这次的函数变成了
vstack。如下所示:
In: vstack((a,8],
[ 0,16]])
同样,我们将concatenate函数的axis参数设置为0即可实现同样的效果。这也是axis参
数的认值:
In: concatenatel((a,axis = 0)
Out:
array([[ 0,16]])

(3) 深度组合 将相同的元组作为参数传给dstack函数,即可完成数组的深度组合。所谓
深度组合,就是将一系列数组沿着纵轴(深度)方向进行层叠组合。举个例子,有若干张二维平
面内的图像点阵数据,我们可以将这些图像数据沿纵轴方向层叠在一起,这就形象地解释了什么
是深度组合。
In: dstack((a,b))
Out:
array([[[0,0],
[1,
[2,4]],
[[3,6],
[4,
[5,10]],
[[6,12],
[7,14],
[8,16]]])
(4) 列组合 column_stack函数对于一维数组将按列方向进行组合,如下所示:
In: oned = arange(2)
In: oned
Out: array([0,1])
In: twice_oned = 2 * oned
In: twice_oned
Out: array([0,2])
In: column_stack((oned,twice_oned))
Out:
array([[0,2]])
而对于二维数组,column_stack与hstack的效果是相同的:
In: column_stack((a,16]])
In: column_stack((a,b)) == hstack((a,b))
Out:
array([[ True,True,True],
[ True,True]],dtype=bool)
是的,你猜对了!我们可以用==运算符来比较两个NumPy数组,是不是很简洁?
(5) 行组合 当然,NumPy中也有按行方向进行组合的函数,它就是row_stack。对于两
个一维数组,将直接层叠起来组合成一个二维数组。
In: row_stack((oned,1],
[0,2]])
对于二维数组,row_stack与vstack的效果是相同的:
In: row_stack((a,16]])
In: row_stack((a,b)) == vstack((a,dtype=bool)
刚才做了些什么
我们按照水平、垂直和深度等方式进行了组合数组的操作。我们使用了vstack、dstack、
hstack、column_stack、row_stack以及concatenate函数

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...