数组的组合
Numpy数组有水平组合、垂直组合和深度组合等多种组合方式,我们将使用vstack、dstack、hstack、column_stack、row_stack以及concatenate函数来完成数组的组合。
创建一些数组:
import numpy as np
a = np.arange(9).reshape(3,3)
print('原始数组:',a)
b = 2 * a
print('乘2后的数组:',b)
运行结果:
#(1)水平组合,将ndarray对象构成的元组作为参数,传给 hstack函数。如下所示:
c = np.hstack((a,b))
print("组合后的数组:\n",c)
运行结果:
# 我们也可以用concatenate函数来实现同样的效果,如下所示:
c = np.concatenate((a,b),axis=1)
print("组合后的数组:\n",c)
运行结果:
# (2) 垂直组合 垂直组合同样需要构造一个元组作为参数,只不过这次的函数变成了 vstack。如下所示:
c = np.vstack((a,b))
print("组合后的数组:\n",c)
运行结果:
# 同样,我们将concatenate函数的axis参数设置为0即可实现同样的效果。这也是axis参 数的默认值:
c = np.concatenate((a,b),axis=0)
print("组合后的数组:\n",c)
运行结果:
(3) 深度组合 将相同的元组作为参数传给dstack函数,即可完成数组的深度组合。所谓
深度组合,就是将一系列数组沿着纵轴(深度)方向进行层叠组合。举个例子,有若干张二维平 面内的图像点阵数据,我们可以将这些图像数据沿纵轴方向层叠在一起,这就形象地解释了什么 是深度组合。
'''
c = np.dstack((a,b))
print("组合后的数组:\n",c)
运行结果:
# (4)列组合 column_stack函数对于一维数组将按列方向进行组合,如下所示:
oned = np.arange(2)
print('原始数组:\n',oned)
twice_oned = 2 * oned
print('乘2后的数组:\n',twice_oned)
print("列组合后的数组:\n",np.column_stack((oned,twice_oned)))
运行结果:
而对于二维数组,column_stack与hstack的效果是相同的:
print("二维数组列组合:\n",np.column_stack((a,b)))
print("column_stack组合与hstack组合相等:\n",np.column_stack((a,b)) == np.hstack((a,b)))
运行结果:
(5) 行组合 当然,NumPy中也有按行方向进行组合的函数,它就是row_stack。对于两个一维数组,将直接层叠起来组合成一个二维数组。
oned = np.arange(2)
print('原始数组:\n',oned)
twice_oned = 2 * oned
print('乘2后的数组:\n',twice_oned)
c = np.row_stack((oned,twice_oned))
print("行组合后的数组:\n",c)
运行结果:
对于二维数组,row_stack与vstack的效果是相同的:
print("二维数组行组合:\n",np.row_stack((a,b)))
print("row_stack组合与vstack组合相等:\n",np.row_stack((a,b)) == np.vstack((a,b)))
运行结果: