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 numpy sum result 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 wrong here? Am I the only one whoβs wondering this?
The way to understand the βaxisβ of numpy sum is it collapses the specified axis. So when it collapses the axis 0 (row), it becomes just one row and columnwise sum.
Ok, sure. But why did numpy choose this way of behavior?
In 2d arrays, it might be confusing, however when we talk about 3d, 4d, nd, itβs the 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 with 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 motivation to write more.Β :)