Numpy Sum Axis Intuition
I’ve always thought that axis 0 is rowwise, and 1 is columnwise.
rowwise (axis 0) > [[ 0 1]
[ 0 5]]
⭡

columnwise (axis 1)
However, the result of numpy.sum is the exact opposite of what I was thinking.
>>> np.sum([[0, 1], [0, 5]], axis=0)
array([0, 6])>>> np.sum([[0, 1], [0, 5]], axis=1)
array([1, 5])
So what’s going on here? Am I the only one who’s wondering this?
The way to understand the “axis” of numpy sum is that it collapses the specified axis. So when it collapses the axis 0 (the row), it becomes just one row (it sums columnwise).
Ok, sure. But why did numpy choose to behave this way?
For 2d arrays, it might be confusing, however when we talk about 3d, 4d, nd, this is a more straightforward way to define the axis.
# Let's experiment with 3d array.
In [5]: x = np.array([[[1,2],[3,4]],[[1,2],[3,4]]])
In [6]: x
Out[6]:
array([[[1, 2],
[3, 4]],
[[1, 2],
[3, 4]]])
In [7]: x.shape
Out[7]: (2, 2, 2)
In [8]: x[0] # axis0
Out[8]:
array([[1, 2],
[3, 4]])
In [9]: x[1] # still axis0
Out[9]:
array([[1, 2],
[3, 4]])
In [10]: x[0][0] # axis1
Out[10]: array([1, 2])
In [11]: x[0][0][0] # axis2
Out[11]: 1
In [12]: np.sum(x, axis=0) # Notice that it eliminated the specified axis.
Out[12]:
array([[2, 4],
[6, 8]])
In [13]: np.sum(x, axis=1)
Out[13]:
array([[4, 6],
[4, 6]])
In [14]: np.sum(x, axis=2)
Out[14]:
array([[3, 7],
[3, 7]])
Same logic goes for Tensorflow.
t1 = [[1, 2, 3], [4, 5, 6]]
t2 = [[7, 8, 9], [10, 11, 12]]
tf.concat([t1, t2], 0) # [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
tf.concat([t1, t2], 1) # [[1, 2, 3, 7, 8, 9], [4, 5, 6, 10, 11, 12]]# tensor t3 with shape [2, 3]
# tensor t4 with shape [2, 3]
tf.shape(tf.concat([t3, t4], 0)) # [4, 3]
tf.shape(tf.concat([t3, t4], 1)) # [2, 6]
If you like my post, could you please clap? It gives me the motivation to write more. :)