Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does the axis parameter from NumPy work?

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.

like image 796
CodyBugstein Avatar asked Mar 11 '14 08:03

CodyBugstein


People also ask

How do axis work in NumPy?

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.

How does NumPy sum axis work?

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.

What is Axis parameter in Python?

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.

What is Axis in NumPy 3D array?

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.


2 Answers

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.

like image 71
Martin Avatar answered Oct 20 '22 13:10

Martin


To understand the axis intuitively, refer the picture below (source: Physics Dept, Cornell Uni)

enter image description here

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.

like image 17
kmario23 Avatar answered Oct 20 '22 13:10

kmario23