Can someone explain exactly what the axis
parameter in NumPy does?
I am terribly confused.
I'm trying to use the function myArray.sum(axis=num)
At first I thought if the array is itself 3 dimensions, axis=0
will return three elements, consisting of the sum of all nested items in that same position. If each dimension contained five dimensions, I expected axis=1
to return a result of five items, and so on.
However this is not the case, and the documentation does not do a good job helping me out (they use a 3x3x3 array so it's hard to tell what's happening)
Here's what I did:
>>> e
array([[[1, 0],
[0, 0]],
[[1, 1],
[1, 0]],
[[1, 0],
[0, 1]]])
>>> e.sum(axis = 0)
array([[3, 1],
[1, 1]])
>>> e.sum(axis=1)
array([[1, 0],
[2, 1],
[1, 1]])
>>> e.sum(axis=2)
array([[1, 0],
[2, 1],
[1, 1]])
>>>
Clearly the result is not intuitive.
Axes are defined for arrays with more than one dimension. A 2-dimensional array has two corresponding axes: the first running vertically downwards across rows (axis 0), and the second running horizontally across columns (axis 1). Fast element-wise operations, called ufuncs, operate on arrays.
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 column-wise sum.
For instance, it refers to the direction along columns performing operations over rows. For the sum() function. The axis parameter is the axis to be collapsed. Hence in the above example. For instance, the axis is set to 1 in the sum() function collapses the columns and sums down the rows.
axis 0 are the columns and axis 1 are the rows. In a three dimensional array: In [26]: x = np.array((((1,2), (3,4) ), ((5,6),(7,8)))) In [27]: x Out[27]: array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) In [28]: x.shape # dimensions of the array Out[28]: (2, 2, 2) In [29]: x.
Clearly,
e.shape == (3, 2, 2)
Sum over an axis is a reduction operation so the specified axis disappears. Hence,
e.sum(axis=0).shape == (2, 2)
e.sum(axis=1).shape == (3, 2)
e.sum(axis=2).shape == (3, 2)
Intuitively, we are "squashing" the array along the chosen axis, and summing the numbers that get squashed together.
To understand the axis
intuitively, refer the picture below (source: Physics Dept, Cornell Uni)
The shape of the (boolean) array in the above figure is shape=(8, 3)
. ndarray.shape will return a tuple where the entries correspond to the length of the particular dimension. In our example, 8
corresponds to length of axis 0 whereas 3
corresponds to length of axis 1.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With