NumPy数组有水平组合、垂直组合和深度组合等多种组合方式,我们将使用vstack、 dstack、hstack、column_stack、row_stack以及concatenate函数来完成数组的组合。
先创建两个数组
import numpy as np
a = np.arange(24).reshape(2,3,4)
b = a * 2
输出如下:
In [7]: a
Out[7]:
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 [8]: b
Out[8]:
array([[[ 0, 2, 4, 6],
[ 8, 10, 12, 14],
[16, 18, 20, 22]],
[[24, 26, 28, 30],
[32, 34, 36, 38],
[40, 42, 44, 46]]])
(1)水平组合——np.hstack()
参数可以是元组、列表或者numpy数组,返回结果为numpy数组。
In [10]: np.hstack((a, b))
Out[10]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[ 0, 2, 4, 6],
[ 8, 10, 12, 14],
[16, 18, 20, 22]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 26, 28, 30],
[32, 34, 36, 38],
[40, 42, 44, 46]]])
可以看到,两个shape为(2,3,4)的数组,水平组合成为了一个(2,6,4)的数组,即在axis=1轴上进行组合。
可以用np.concatenate()函数来实现同样的效果:
设置参数axis=1
In [13]: np.concatenate((a, b), axis=1)
Out[13]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[ 0, 2, 4, 6],
[ 8, 10, 12, 14],
[16, 18, 20, 22]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23],
[24, 26, 28, 30],
[32, 34, 36, 38],
[40, 42, 44, 46]]])
(2)垂直组合——np.vstack()
参数可以是元组、列表或者numpy数组,返回结果为numpy数组。
In [14]: np.vstack((a, b))
Out[14]:
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]],
[[ 0, 2, 4, 6],
[ 8, 10, 12, 14],
[16, 18, 20, 22]],
[[24, 26, 28, 30],
[32, 34, 36, 38],
[40, 42, 44, 46]]])
可以看到,两个shape为(2,3,4)的数组,垂直组合成为了一个(4,3,4)的数组,即在axis=0轴上进行组合。
可以用np.concatenate()函数来实现同样的效果:
In [15]: np.concatenate((a, b))
Out[15]:
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]],
[[ 0, 2, 4, 6],
[ 8, 10, 12, 14],
[16, 18, 20, 22]],
[[24, 26, 28, 30],
[32, 34, 36, 38],
[40, 42, 44, 46]]])
这是在0轴上的组合,因为concatenate()函数默认axis=0,所以这里可以不用设置axis。
(3)深度组合——np.dstack()
In [21]: np.dstack((a, b))
Out[21]:
array([[[ 0, 1, 2, 3, 0, 2, 4, 6],
[ 4, 5, 6, 7, 8, 10, 12, 14],
[ 8, 9, 10, 11, 16, 18, 20, 22]],
[[12, 13, 14, 15, 24, 26, 28, 30],
[16, 17, 18, 19, 32, 34, 36, 38],
[20, 21, 22, 23, 40, 42, 44, 46]]])
可以看到,两个shape为(2,3,4)的数组,深度组合成为了一个(2,3,8)的数组。
可以用np.concatenate()函数来实现同样的效果,设置axis=2:
In [22]: np.concatenate((a, b), axis=2)
Out[22]:
array([[[ 0, 1, 2, 3, 0, 2, 4, 6],
[ 4, 5, 6, 7, 8, 10, 12, 14],
[ 8, 9, 10, 11, 16, 18, 20, 22]],
[[12, 13, 14, 15, 24, 26, 28, 30],
[16, 17, 18, 19, 32, 34, 36, 38],
[20, 21, 22, 23, 40, 42, 44, 46]]])
(4)列组合——np.column_stack()
(5)行组合——np.row_stack()
更多详细内容可以参考:numpy库数组拼接快捷方式horizontal&vertical、np.c_、np.column_stack等官方文档详解与实例