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 lesson illustrates difference between stack, vstack, hstack,
column_stack, row_stack and concatenate
import time
import numpy as np
print(time.asctime())
print(np.__version__)
Mon Nov 11 07:57:05 2024
1.26.4
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)
The shapes of the arrays must be same except in the dimension corresponding to axis
a = np.random.random((10, 2))
b = np.random.random((10, 1))
# print(np.concatenate([a,b], axis=0)) # Error
In above example, axis 0 has 10 but axis 1 has 2 and 1. So, it is not possible to concatenate
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)
shape has to be same
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#
1D arrays
a = np.random.random(10)
b = np.random.random(10)
print('concatenate: ', np.concatenate([a,b]).shape)
print('stack ', np.stack([a,b]).shape)
print('vstack: ', np.vstack([a,b]).shape)
print('hstack: ', np.hstack([a,b]).shape)
print('row_stack: ', np.row_stack([a,b]).shape)
print('column_stack:', np.column_stack([a,b]).shape)
print('dstack: ', np.dstack([a,b]).shape)
concatenate: (20,)
stack (2, 10)
vstack: (2, 10)
hstack: (20,)
row_stack: (2, 10)
column_stack: (10, 2)
dstack: (1, 10, 2)
2D arrays
a = np.random.random((10, 1))
b = np.random.random((10, 1))
print('concatenate: ', np.concatenate([a,b]).shape)
print('stack: ', np.stack([a,b]).shape)
print('vstack: ', np.vstack([a,b]).shape)
print('hstack: ', np.hstack([a,b]).shape)
print('row_stack: ', np.row_stack([a,b]).shape)
print('column_stack: ', np.column_stack([a,b]).shape)
print('dstack: ', np.dstack([a,b]).shape)
concatenate: (20, 1)
stack: (2, 10, 1)
vstack: (20, 1)
hstack: (10, 2)
row_stack: (20, 1)
column_stack: (10, 2)
dstack: (10, 1, 2)
2D arrays
a = np.random.random((10, 2))
b = np.random.random((10, 2))
print('concatenate: ', np.concatenate([a,b]).shape)
print('stack: ', np.stack([a,b]).shape)
print('vstack: ', np.vstack([a,b]).shape)
print('hstack: ', np.hstack([a,b]).shape)
print('row_stack: ', np.row_stack([a,b]).shape)
print('column_stack:',np.column_stack([a,b]).shape)
print('dstack: ', np.dstack([a,b]).shape)
concatenate: (20, 2)
stack: (2, 10, 2)
vstack: (20, 2)
hstack: (10, 4)
row_stack: (20, 2)
column_stack: (10, 4)
dstack: (10, 2, 2)
2D arrays with different shapes
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('hstack: ', np.hstack([a,b]).shape)
# print(np.row_stack([a,b]).shape) # ValueError
print('column_stack: ', np.column_stack([a,b]).shape)
# print(np.dstack([a,b]).shape) # ValueError
hstack: (10, 3)
column_stack: (10, 3)
3D arrays
a = np.random.random((10, 5, 3))
b = np.random.random((10, 5, 3))
print('concatenate: ', np.concatenate([a,b]).shape)
print('stack: ', np.stack([a,b]).shape)
print('vstack: ', np.vstack([a,b]).shape)
print('hstack: ', np.hstack([a,b]).shape)
print('row_stack: ', np.row_stack([a,b]).shape)
print('column_stack:', np.column_stack([a,b]).shape)
print('dstack: ', np.dstack([a,b]).shape)
concatenate: (20, 5, 3)
stack: (2, 10, 5, 3)
vstack: (20, 5, 3)
hstack: (10, 10, 3)
row_stack: (20, 5, 3)
column_stack: (10, 10, 3)
dstack: (10, 5, 6)
Total running time of the script: ( 0 minutes 0.025 seconds)