最近看python代码老是看到np.hstack, np.vstack以及np.dstack等,今天简要总结一下我自己的一个理解。这三个stack的变化分别可以称为水平stack(hstack), 垂直stack(vstack)和深度stack(dstack),前两个在二维数组中很好理解,但在三维情况不太好理解。
1. 二维数组
示例代码:
>>> a = np.arange(1,10)
>>> a = a.reshape(3,3)
>>> b = np.arange(10,19)
>>> b = b.reshape(3,3)
>>> np.hstack((a,b))
array([[ 1, 2, 3, 10, 11, 12],
[ 4, 5, 6, 13, 14, 15],
[ 7, 8, 9, 16, 17, 18]])
>>> np.vstack((a,b,c))
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12],
[13, 14, 15],
[16, 17, 18]])
>>> np.dstack((a,b,c))
array([[[ 1, 10],
[ 2, 11],
[ 3, 12]],
[[ 4, 13],
[ 5, 14],
[ 6, 15]],
[[ 7, 16],
[ 8, 17],
[ 9, 18]]])
2. 三维数组
>>> a = np.arange(1,28)
>>> a = a.reshape(3,3,3)
>>> b = np.arange(28,55)
>>> b = b.reshape(3,3,3)
>>> np.hstack((a,b))
array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[28, 29, 30],
[31, 32, 33],
[34, 35, 36]],
[[10, 11, 12],
[13, 14, 15],
[16, 17, 18],
[37, 38, 39],
[40, 41, 42],
[43, 44, 45]],
[[19, 20, 21],
[22, 23, 24],
[25, 26, 27],
[46, 47, 48],
[49, 50, 51],
[52, 53, 54]]])
>>> np.vstack((a,b))
array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]],
[[10, 11, 12],
[13, 14, 15],
[16, 17, 18]],
[[19, 20, 21],
[22, 23, 24],
[25, 26, 27]],
[[28, 29, 30],
[31, 32, 33],
[34, 35, 36]],
[[37, 38, 39],
[40, 41, 42],
[43, 44, 45]],
[[46, 47, 48],
[49, 50, 51],
[52, 53, 54]]])
>>> np.dstack((a,b))
array([[[ 1, 2, 3, 28, 29, 30],
[ 4, 5, 6, 31, 32, 33],
[ 7, 8, 9, 34, 35, 36]],
[[10, 11, 12, 37, 38, 39],
[13, 14, 15, 40, 41, 42],
[16, 17, 18, 43, 44, 45]],
[[19, 20, 21, 46, 47, 48],
[22, 23, 24, 49, 50, 51],
[25, 26, 27, 52, 53, 54]]])