NumPy数组有水平组合、垂直组合和深度组合等多种组合方式,下面一一介绍。
一、水平组合(hstack)
1、水平组合:
两个数组的行数必须相同(不同会抛出异常),列数可以不同。
2、实例:
from numpy import * a = arange(9).reshape(3,3) b = a * 3 #将数组a中的每一个元素乘以3 print(a) print(b) print("-----------------------1111--------------------------") c = a * 5 d = arange(12).reshape(3,4) e = arange(12).reshape(4,3) print(hstack((a,b))) print("-----------------------2222--------------------------") print(hstack((a,b,c))) print("-----------------------3333--------------------------") print(hstack((a,d))) print("-----------------------4444--------------------------") #print(hstack((a,e)))
输出结果:
[[0 1 2] [3 4 5] [6 7 8]] [[ 0 3 6] [ 9 12 15] [18 21 24]] -----------------------1111-------------------------- [[ 0 1 2 0 3 6] [ 3 4 5 9 12 15] [ 6 7 8 18 21 24]] -----------------------2222-------------------------- [[ 0 1 2 0 3 6 0 5 10] [ 3 4 5 9 12 15 15 20 25] [ 6 7 8 18 21 24 30 35 40]] -----------------------3333-------------------------- [[ 0 1 2 0 1 2 3] [ 3 4 5 4 5 6 7] [ 6 7 8 8 9 10 11]] -----------------------4444--------------------------
二、垂直组合(vstack)
1、垂直组合:
两个数组的列数必须相同(不同会抛出异常),行数可以不同。
2、实例:
from numpy import * a = arange(12).reshape(3,4) b = arange(16).reshape(4,4) print(a) print("-----------------------1111--------------------------") print(b) print("-----------------------2222--------------------------") print(vstack((a,b)))
输出结果:
[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] -----------------------1111-------------------------- [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]] -----------------------2222-------------------------- [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]]
三、深度组合(dstack)
1、深度组合:
就是将一系列数组沿着纵轴(深度)方向进行层叠组合。举一个例子,有若干张二维平面内的图像点阵数据,我们可以将这些图像数据沿纵轴方向层叠在一起,这就形象地解释了什么是深度组合。
2、实例:
from numpy import * #深度组合的时候,每一个数组的维数要相同,如果不同就会抛出异常 a = arange(12).reshape(2,6) b = a * 2 c = a * 3 d = a * 4 e = dstack((a,b,c,d)) print(a) print("-----------------------1111--------------------------") print(b) print("-----------------------2222--------------------------") print(c) print("-----------------------3333--------------------------") print(d) print("-----------------------4444--------------------------") print(e) print(e.shape) print("-----------------------5555--------------------------") print(a[0][0]) print(b[0][0]) print(c[0][0]) print(d[0][0]) print(e[0][0]) print(e[0][1]) print(e[1][1]) print("-----------------------6666--------------------------") x = arange(24).reshape(2,3,4) print(x) y = arange(24).reshape(2,3,4) print(y) z = dstack((x,y)) print(z) print(z.shape)
输出结果:
[[ 0 1 2 3 4 5] [ 6 7 8 9 10 11]] -----------------------1111-------------------------- [[ 0 2 4 6 8 10] [12 14 16 18 20 22]] -----------------------2222-------------------------- [[ 0 3 6 9 12 15] [18 21 24 27 30 33]] -----------------------3333-------------------------- [[ 0 4 8 12 16 20] [24 28 32 36 40 44]] -----------------------4444-------------------------- [[[ 0 0 0 0] [ 1 2 3 4] [ 2 4 6 8] [ 3 6 9 12] [ 4 8 12 16] [ 5 10 15 20]] [[ 6 12 18 24] [ 7 14 21 28] [ 8 16 24 32] [ 9 18 27 36] [10 20 30 40] [11 22 33 44]]] (2, 6, 4) -----------------------5555-------------------------- 0 0 0 0 [0 0 0 0] [1 2 3 4] [ 7 14 21 28] -----------------------6666-------------------------- [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] [[[ 0 1 2 3 0 1 2 3] [ 4 5 6 7 4 5 6 7] [ 8 9 10 11 8 9 10 11]] [[12 13 14 15 12 13 14 15] [16 17 18 19 16 17 18 19] [20 21 22 23 20 21 22 23]]] (2, 3, 8)
四、列组合(column_stack)
1、列组合:
以列方式对一维数组进行堆叠。而对于二维数组columm_stack与hstack效果是相同的。
2、实例:
from numpy import * a = arange(5) b = a * 2 c = a * 3 x = a * 4 print(a) print(b) print(c) print(x) d = column_stack((a,b,c,x)) print(d) print(d.shape) print("-----------------------1111--------------------------") a = arange(12).reshape(3,4) b = a * 2 c = a * 3 d = column_stack((a,b,c)) print(a) print("-----------------------2222--------------------------") print(b) print("-----------------------3333--------------------------") print(c) print("-----------------------4444--------------------------") print(d) print(d.shape)
输出结果:
[0 1 2 3 4] [0 2 4 6 8] [ 0 3 6 9 12] [ 0 4 8 12 16] [[ 0 0 0 0] [ 1 2 3 4] [ 2 4 6 8] [ 3 6 9 12] [ 4 8 12 16]] (5, 4) -----------------------1111-------------------------- [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] -----------------------2222-------------------------- [[ 0 2 4 6] [ 8 10 12 14] [16 18 20 22]] -----------------------3333-------------------------- [[ 0 3 6 9] [12 15 18 21] [24 27 30 33]] -----------------------4444-------------------------- [[ 0 1 2 3 0 2 4 6 0 3 6 9] [ 4 5 6 7 8 10 12 14 12 15 18 21] [ 8 9 10 11 16 18 20 22 24 27 30 33]] (3, 12)
五、行组合(row_stack):
1、行组合:
numpy也有以行方式对数组进行堆叠的函数,这个用于一维数组的函数名为row_stack(),它将数组作为行码放到二维数组中。对于二维数组,row_stack与vstack的效果是相同的。
2、实例:
from numpy import * a = arange(5) b = a * 2 c = a * 3 x = a * 4 print(a) print(b) print(c) print(x) print("-----------------------1111--------------------------") d = row_stack((a,b,c,x)) print(d) print(d.shape) print("-----------------------222222222--------------------------") a = arange(12).reshape(3,4) b = a * 2 c = a * 3 d = row_stack((a,b,c)) print(a) print("-----------------------2222--------------------------") print(b) print("-----------------------3333--------------------------") print(c) print("-----------------------4444--------------------------") print(d) print(d.shape)
输出结果:
[0 1 2 3 4] [0 2 4 6 8] [ 0 3 6 9 12] [ 0 4 8 12 16] -----------------------1111-------------------------- [[ 0 1 2 3 4] [ 0 2 4 6 8] [ 0 3 6 9 12] [ 0 4 8 12 16]] (4, 5) -----------------------222222222-------------------------- [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] -----------------------2222-------------------------- [[ 0 2 4 6] [ 8 10 12 14] [16 18 20 22]] -----------------------3333-------------------------- [[ 0 3 6 9] [12 15 18 21] [24 27 30 33]] -----------------------4444-------------------------- [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [ 0 2 4 6] [ 8 10 12 14] [16 18 20 22] [ 0 3 6 9] [12 15 18 21] [24 27 30 33]] (9, 4)