4.2 stacking vs concatenating
Contents
Note
Click here to download the full example code or to run this example in your browser via Binder
4.2 stacking vs concatenating#
This file illustrates difference between stack
, vstack
, hstack
,
column_stack
, row_stack
and concatenate
import numpy as np
print(np.__version__)
1.26.3
stack#
all arrays must have same shape
both 1d arrays
a = np.random.random(10)
b = np.random.random(10)
print(np.stack([a,b]).shape)
(2, 10)
both 2D
a = np.random.random((10, 1))
b = np.random.random((10, 1))
print(np.stack([a,b]).shape)
(2, 10, 1)
(10, 2, 1)
(10, 1, 2)
a = np.random.random((10, 2))
b = np.random.random((10, 2))
print(np.stack([a,b]).shape)
(2, 10, 2)
(2, 10, 2)
(10, 2, 2)
(10, 2, 2)
# print(np.stack([a,b], axis=3).shape) # np.AxisError
different shapes
a = np.random.random((10, 2))
b = np.random.random((10, 1))
# print(np.stack([a,b]).shape) # ValueError
# print(np.stack([a,b], axis=0).shape) # ValueError
# print(np.stack([a,b], axis=1).shape) # ValueError
concatenate#
a = np.random.random(10)
b = np.random.random(10)
print(np.concatenate([a,b]).shape)
(20,)
print(np.concatenate([a,b], axis=0).shape)
(20,)
# print(np.concatenate([a,b], axis=1).shape) # Error
a = np.random.random((10, 1))
b = np.random.random((10, 1))
print(np.concatenate([a,b]).shape)
(20, 1)
print(np.concatenate([a,b], axis=1).shape)
(10, 2)
a = np.random.random((10, 2))
b = np.random.random((10, 1))
# print(np.concatenate([a,b], axis=0)) # Error
print(np.concatenate([a,b], axis=1).shape)
(10, 3)
a = np.random.random((10, 2))
b = np.random.random((10, 2))
print(np.concatenate([a,b]).shape)
(20, 2)
print(np.concatenate([a,b], axis=1).shape)
(10, 4)
# print(np.concatenate([a,b], axis=2).shape) # AxisError
a = np.random.random((10, 5, 3))
b = np.random.random((10, 5, 3))
print(np.concatenate([a,b]).shape)
(20, 5, 3)
print(np.concatenate([a,b], axis=1).shape)
(10, 10, 3)
print(np.concatenate([a,b], axis=2).shape)
(10, 5, 6)
vstack#
a = np.random.random(10)
b = np.random.random(10)
print(np.vstack([a,b]).shape)
(2, 10)
a = np.random.random((10, 1))
b = np.random.random((10, 1))
print(np.vstack([a,b]).shape)
(20, 1)
a = np.random.random((10, 2))
b = np.random.random((10, 2))
print(np.vstack([a,b]).shape)
(20, 2)
a = np.random.random((10, 2))
b = np.random.random((10, 1))
print(np.hstack([a,b]).shape)
(10, 3)
a = np.random.random((10, 5, 3))
b = np.random.random((10, 5, 3))
print(np.hstack([a,b]).shape)
(10, 10, 3)
hstack#
a = np.random.random(10)
b = np.random.random(10)
print(np.hstack([a,b]).shape)
(20,)
a = np.random.random((10, 1))
b = np.random.random((10, 1))
print(np.hstack([a,b]).shape)
(10, 2)
a = np.random.random((10, 2))
b = np.random.random((10, 2))
print(np.hstack([a,b]).shape)
(10, 4)
a = np.random.random((10, 2))
b = np.random.random((10, 1))
print(np.hstack([a,b]).shape)
(10, 3)
a = np.random.random((10, 5, 3))
b = np.random.random((10, 5, 3))
print(np.hstack([a,b]).shape)
(10, 10, 3)
column stack#
a = np.random.random(10)
b = np.random.random(10)
print(np.column_stack([a,b]).shape)
(10, 2)
a = np.random.random((10, 1))
b = np.random.random((10, 1))
print(np.column_stack([a,b]).shape)
(10, 2)
a = np.random.random((10, 2))
b = np.random.random((10, 2))
print(np.column_stack([a,b]).shape)
(10, 4)
a = np.random.random((10, 2))
b = np.random.random((10, 1))
print(np.column_stack([a,b]).shape)
(10, 3)
a = np.random.random((10, 5, 3))
b = np.random.random((10, 5, 3))
print(np.column_stack([a,b]).shape)
(10, 10, 3)
row stack#
a = np.random.random(10)
b = np.random.random(10)
print(np.row_stack([a,b]).shape)
(2, 10)
a = np.random.random((10, 1))
b = np.random.random((10, 1))
print(np.row_stack([a,b]).shape)
(20, 1)
a = np.random.random((10, 2))
b = np.random.random((10, 2))
print(np.row_stack([a,b]).shape)
(20, 2)
a = np.random.random((10, 2))
b = np.random.random((10, 1))
# print(np.row_stack([a,b]).shape) ValueError
a = np.random.random((10, 5, 3))
b = np.random.random((10, 5, 3))
print(np.row_stack([a,b]).shape)
(20, 5, 3)
dstack#
depth wise stacking
a = np.random.random(10)
b = np.random.random(10)
print(np.dstack([a,b]).shape)
(1, 10, 2)
a = np.random.random((10, 1))
b = np.random.random((10, 1))
print(np.dstack([a,b]).shape)
(10, 1, 2)
a = np.random.random((10, 2))
b = np.random.random((10, 2))
print(np.dstack([a,b]).shape)
(10, 2, 2)
a = np.random.random((10, 2))
b = np.random.random((10, 1))
# print(np.dstack([a,b]).shape) # ValueError
a = np.random.random((10, 5, 3))
b = np.random.random((10, 5, 3))
print(np.dstack([a,b]).shape)
(10, 5, 6)
comparison#
a = np.random.random(10)
b = np.random.random(10)
print(np.concatenate([a,b]).shape)
print(np.stack([a,b]).shape)
print(np.vstack([a,b]).shape)
print(np.hstack([a,b]).shape)
print(np.row_stack([a,b]).shape)
print(np.column_stack([a,b]).shape)
print(np.dstack([a,b]).shape)
(20,)
(2, 10)
(2, 10)
(20,)
(2, 10)
(10, 2)
(1, 10, 2)
a = np.random.random((10, 1))
b = np.random.random((10, 1))
print(np.concatenate([a,b]).shape)
print(np.stack([a,b]).shape)
print(np.vstack([a,b]).shape)
print(np.hstack([a,b]).shape)
print(np.row_stack([a,b]).shape)
print(np.column_stack([a,b]).shape)
print(np.dstack([a,b]).shape)
(20, 1)
(2, 10, 1)
(20, 1)
(10, 2)
(20, 1)
(10, 2)
(10, 1, 2)
a = np.random.random((10, 2))
b = np.random.random((10, 2))
print(np.concatenate([a,b]).shape)
print(np.stack([a,b]).shape)
print(np.vstack([a,b]).shape)
print(np.hstack([a,b]).shape)
print(np.row_stack([a,b]).shape)
print(np.column_stack([a,b]).shape)
print(np.dstack([a,b]).shape)
(20, 2)
(2, 10, 2)
(20, 2)
(10, 4)
(20, 2)
(10, 4)
(10, 2, 2)
a = np.random.random((10, 2))
b = np.random.random((10, 1))
# print(np.concatenate([a,b]).shape) # ValueError
# print(np.stack([a,b]).shape) # ValueError
# print(np.vstack([a,b]).shape) # ValueError
print(np.hstack([a,b]).shape)
# print(np.row_stack([a,b]).shape) # ValueError
print(np.column_stack([a,b]).shape)
# print(np.dstack([a,b]).shape) # ValueError
(10, 3)
(10, 3)
a = np.random.random((10, 5, 3))
b = np.random.random((10, 5, 3))
print(np.concatenate([a,b]).shape)
print(np.stack([a,b]).shape)
print(np.vstack([a,b]).shape)
print(np.hstack([a,b]).shape)
print(np.row_stack([a,b]).shape)
print(np.column_stack([a,b]).shape)
print(np.dstack([a,b]).shape)
(20, 5, 3)
(2, 10, 5, 3)
(20, 5, 3)
(10, 10, 3)
(20, 5, 3)
(10, 10, 3)
(10, 5, 6)
Total running time of the script: ( 0 minutes 0.025 seconds)