Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does the axis argument in NumPy change?

I am very confused when it comes to the logic of the NumPy axis argument. In some cases it affects the row when axis = 0 and in some cases it affects the columns when axis = 0. Example:

a = np.array([[1,3,6,7,4],[3,2,5,9,1]])
array([[1,3,6,7,4],
       [3,2,5,9,1]])

np.sort(a, axis = 0)   #This sorts the columns
array([[1, 2, 5, 7, 1],  
       [3, 3, 6, 9, 4]])

np.sort(a, axis=1)     #This sorts the rows           
array([[1, 3, 4, 6, 7],
       [1, 2, 3, 5, 9]])

#####################################################################
arr = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
arr
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])

np.delete(arr,obj = 1, axis = 0)        # This deletes the row
array([[ 1,  2,  3,  4],
       [ 9, 10, 11, 12]])

np.delete(arr,obj = 1, axis = 1)        #This deletes the column
array([[ 1,  3,  4],
       [ 5,  7,  8],
       [ 9, 11, 12]])

If there is some logic here that I am missing I would love to learn it.

like image 361
Ben Fuqua Avatar asked Nov 16 '25 19:11

Ben Fuqua


1 Answers

It's perhaps simplest to remember it as 0=down and 1=across.

This means: enter image description here Use axis=0 to apply a method down each column, or to the row labels (the index). Use axis=1 to apply a method across each row, or to the column labels. Here's a picture to show the parts of a DataFrame that each axis refers to:

It's also useful to remember that Pandas follows NumPy's use of the word axis. The usage is explained in NumPy's glossary of terms:

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). [my emphasis]

So, concerning the method in the question, np.sort(axis=1), seems to be correctly defined. It takes the mean of entries horizontally across columns, that is, along each individual row. On the other hand, np.sort(axis=0) would be an operation acting vertically downwards across rows.

Similarly, np.delete(name, axis=1) refers to an action on column labels, because they intuitively go across the horizontal axis. Specifying axis=0 would make the method act on rows instead.

like image 66
Bibin Varghses Avatar answered Nov 18 '25 09:11

Bibin Varghses



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!