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)