总结:
- concatenate、stack、hstack、vstack、dstack都是将多个序列连接起来的方法,只是连接的方法不同;
- concatenate是在存在的维度上连接序列,并且除了操作的维度,其他维度的尺寸要相同;
- stack是在增加的新的维度上连接序列,需要连接的所有序列的所有维度都要相同;
- vstack、hstack相当于stack在axis=0,axis=1的轴上的操作;
- stack、vstack、hstack相当于增加新的维度之后的concatenate。
1、numpy.concatenate((a1, a2, …), axis=0, out=None, dtype=None, casting=“same_kind”)
-
Join a sequence of arrays along an existing axis.
沿某个存在的轴方向连接序列 -
参数:
a1、a2:需要连接的序列,两个序列除了axis的方向,其他尺寸要相同
axis:默认是0 -
例1:
a的size是2x2,b的szie是1x2,在axis=0的轴上连接序列(这个时候,axis=1上的尺寸是相同的),变成3x2;b转置之后,变为2x1,在axis=1上连接序列(这个时候,axis=0上的尺寸是相同的),变成2x3
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
np.concatenate((a, b), axis=0)
array([[1, 2],
[3, 4],
[5, 6]])
np.concatenate((a, b.T), axis=1)
array([[1, 2, 5],
[3, 4, 6]])
np.concatenate((a, b), axis=None)
array([1, 2, 3, 4, 5, 6])
2、numpy.stack(arrays, axis=0, out=None)
-
Join a sequence of arrays along a new axis.
在新的axis上连接序列 -
参数解释:
arrays,需要连接的序列必须有相同的尺寸
axis, 结果序列中增加的轴,axis=0是第一个维度,axis=-1是最后一个维度 -
例1:
生成了10个3x4的序列,当在axis=0上连接时,10个序列增加一个维度,变成1x3x4的尺寸,同样的,在axis=1时,增加维度变成3x1x4,在axis=2时,增加维度变成3x4x1。
arrays = [np.random.randn(3, 4) for _ in range(10)]
np.stack(arrays, axis=0).shape
(10, 3, 4)
np.stack(arrays, axis=1).shape
(3, 10, 4)
np.stack(arrays, axis=2).shape
(3, 4, 10)
- 例2:axis=0时,a,b增加一个维度,变成1x3,axis=1时,增加维度变成3x1
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
(3,)
np.stack((a, b))
array([[1, 2, 3],
[4, 5, 6]])
(2, 3)
np.stack((a, b), axis=-1)
array([[1, 4],
[2, 5],
[3, 6]])
(3, 2)
3、numpy.vstack(tup)
-
Stack arrays in sequence vertically (row wise).
除了大小为(N,) 的一维序列需要reshape为(1,N),其他序列在第二个维度上连接序列,即np.stack(arrays, axis=0) -
例1:
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
np.vstack((a,b))
# np.stack((a,b), xis=0)
array([[1, 2, 3],
[4, 5, 6]])
a = np.array([[1], [2], [3]])
b = np.array([[4], [5], [6]])
np.vstack((a,b))
array([[1],
[2],
[3],
[4],
[5],
[6]])
4、numpy.vstack(tup)
-
Stack arrays in sequence horizontally (column wise).
除了一维数据是在第一个维度,其他序列在第二个轴上连接,即np.stack(arrays, axis=1) -
例1:
a = np.array((1,2,3))
b = np.array((4,5,6))
# np.stack((a,b), axis=1)
np.hstack((a,b))
array([1, 2, 3, 4, 5, 6])
a = np.array([[1],[2],[3]])
b = np.array([[4],[5],[6]])
np.hstack((a,b))
array([[1, 4],
[2, 5],
[3, 6]])
5、numpy.dstack(tup)
-
Stack arrays in sequence depth wise (along third axis).
当遇到大小为(M,N)的 2-D序列时,reshape为(M,N,1),或者大小为(N,)的1-D序列时,reshape为(1,N,1),然后在第三维上进行连接,即np.stack(arrays, axis=2) -
例1:
a = np.array((1,2,3))
b = np.array((2,3,4))
np.dstack((a,b))
array([[[1, 2],
[2, 3],
[3, 4]]])
a = np.array([[1],[2],[3]])
b = np.array([[2],[3],[4]])
np.dstack((a,b))
array([[[1, 2]],
[[2, 3]],
[[3, 4]]])