- Published on
Understanding Numpys Concatenate Axis Field
- Authors
- Name
- Yair Mark
- @yairmark
I have been getting a feel for the Numpy API by working through the Numpy exercises on HackerRank.
One thing that stumped me initially is trying to understand what the axis
parameter means with the numpy.concatenate function.
In the official documentation, it is described as:
The axis along which the arrays will be joined. If axis is None, arrays are flattened before use. Default is 0.
To better understand this I started by modifying the HackerRank concatenate exercise examples a bit (to make it clear what elements come from where) and outputing these examples:
array_1 = numpy.array([[1, 2, 3], [4, 5, 6]])
array_2 = numpy.array([[0, 0, 0], [7, 8, 9]])
print('array_1\n', array_1, '\n\narray_2\n', array_2)
This outputs:
array_1
[[1 2 3]
[4 5 6]]
array_2
[[0 0 0]
[7 8 9]]
For clarity the first array as a table would be:
1 | 2 | 3 |
4 | 5 | 6 |
The second array would be:
0 | 0 | 0 |
7 | 8 | 9 |
I then ran the following code:
print('axis = 0\n', numpy.concatenate((array_1, array_2), axis=0))
print('\n\naxis = 1\n', numpy.concatenate((array_1, array_2), axis=1))
This outpus:
axis = 0
[[1 2 3]
[4 5 6]
[0 0 0]
[7 8 9]]
axis = 1
[[1 2 3 0 0 0]
[4 5 6 7 8 9]]
I adjusted the example a bit:
array_1 = numpy.array([[1, 2, 3], [4, 5, 6], [7,8,9]])
array_2 = numpy.array([[0, 0, 0], [10, 11, 12], [13,14,15]])
print('array_1\n', array_1, '\n\narray_2\n', array_2, '\n')
print('axis = 0\n', numpy.concatenate((array_1, array_2), axis=0))
print('\n\naxis = 1\n', numpy.concatenate((array_1, array_2), axis=1))
Which outputs:
array_1
[[1 2 3]
[4 5 6]
[7 8 9]]
array_2
[[ 0 0 0]
[10 11 12]
[13 14 15]]
axis = 0
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[ 0 0 0]
[10 11 12]
[13 14 15]]
axis = 1
[[ 1 2 3 0 0 0]
[ 4 5 6 10 11 12]
[ 7 8 9 13 14 15]]
For a 2D array there are only 2 axes: 0
and 1
. For an ND array there are n
axes the first is 0
the last is n-1
.
An easier way to think of the axes is as labels for different parts of the table. For example for a 2D array:
0
refers to the row side of the table i.e. where the rows start- When we use this in concatenate it says: "take the 2 tables and combine them along row side of the table."
1
refers to the column side of the table i.e. where the columns start- When we use this in concatenate it says: "take the 2 tables and combine them along column side of the table."
To illustrate this I have created a simple diagram below:
This article goes into Numpy axes in much more detail.