First, set up some arrays:
In: a = arange(9).reshape(3,3) In: a Out: array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) In: b = 2 * a In: b Out: array([[ 0, 2, 4], [ 6, 8, 10], [12, 14, 16]])
ndarray
objects and give it to the hstack()
function as follows:In: hstack((a, b)) Out: array([[ 0, 1, 2, 0, 2, 4], [ 3, 4, 5, 6, 8, 10], [ 6, 7, 8, 12, 14, 16]])
Achieve the same with the concatenate()
function as follows (the axis argument here is equivalent to axes in a Cartesian coordinate system and corresponds to the array dimensions):
In: concatenate((a, b), axis=1) Out: array([[ 0, 1, 2, 0, 2, 4], [ 3, 4, 5, 6, 8, 10], [ 6, 7, 8, 12, 14, 16]])
This image shows horizontal stacking with the concatenate()
function:
vstack()
function as follows:In: vstack((a, b)) Out: array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 0, 2, 4], [ 6, 8, 10], [12, 14, 16]])
The concatenate()
function produces the same result with the axis set to 0. This is the default value for the axis
argument:
In: concatenate((a, b), axis=0) Out: array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 0, 2, 4], [ 6, 8, 10], [12, 14, 16]])
The following diagram shows vertical stacking with concatenate()
function:
dstack()
and a tuple stacks a list of arrays along the third axis (depth). For instance, stack two-dimensional arrays of image data on top of each other:In: dstack((a, b)) Out: array([[[ 0, 0], [ 1, 2], [ 2, 4]], [[ 3, 6], [ 4, 8], [ 5, 10]], [[ 6, 12], [ 7, 14], [ 8, 16]]])
column_stack()
function column-wise as follows:In: oned = arange(2) In: oned Out: array([0, 1]) In: twice_oned = 2 * oned In: twice_oned Out: array([0, 2]) In: column_stack((oned, twice_oned)) Out: array([[0, 0], [1, 2]])
Two-dimensional arrays are stacked the way hstack()
stacks them:
In: column_stack((a, b)) Out: array([[ 0, 1, 2, 0, 2, 4], [ 3, 4, 5, 6, 8, 10], [ 6, 7, 8, 12, 14, 16]]) In: column_stack((a, b)) == hstack((a, b)) Out: array([[ True, True, True, True, True, True], [ True, True, True, True, True, True], [ True, True, True, True, True, True]], dtype=bool)
Yes, you guessed it right! We compared two arrays with the ==
operator.
The == operator is used in Python to compare for equality. When applied to NumPy arrays, the operator performs element-wise comparisons. For more information about the Python comparison operators, have a look at http://www.pythonlearn.com/html-009/book004.html.
row_stack()
, and, for one-dimensional arrays, it just stacks the arrays in rows into a two-dimensional array:In: row_stack((oned, twice_oned)) Out: array([[0, 1], [0, 2]])
The row_stack()
function results for two-dimensional arrays are equal to, yes, exactly, the vstack()
function results:
In: row_stack((a, b)) Out: array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 0, 2, 4], [ 6, 8, 10], [12, 14, 16]]) In: row_stack((a,b)) == vstack((a, b)) Out: array([[ True, True, True], [ True, True, True], [ True, True, True], [ True, True, True], [ True, True, True], [ True, True, True]], dtype=bool)
We stacked arrays horizontally, depth wise, and vertically. We used the vstack()
, dstack()
, hstack()
, column_stack()
, row_stack()
, and concatenate()
functions as summarized in the following table:
The code for this example is in the stacking.py
file in this book's code bundle.