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)
print(np.stack([a,b], axis=1).shape)
(10, 2, 1)
print(np.stack([a,b], axis=2).shape)
(10, 1, 2)
a = np.random.random((10, 2))
b = np.random.random((10, 2))

print(np.stack([a,b]).shape)
(2, 10, 2)
print(np.stack([a,b], axis=0).shape)
(2, 10, 2)
print(np.stack([a,b], axis=1).shape)
(10, 2, 2)
print(np.stack([a,b], axis=2).shape)
(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)

Gallery generated by Sphinx-Gallery