I'm trying to convert all my codes to Python. I want to sort an array which has two columns so that the sorting must be based on the 2th column in the ascending order. Then I need to sum the first column data (from first line to, for example, 100th line). I used "Data.sort(axis=1)", but it doesn't work. Does anyone have any idea to solve this problem?
Sorting 2D Numpy Array by column at index 1 Select the column at index 1 from 2D numpy array i.e. It returns the values at 2nd column i.e. column at index position 1 i.e. Now get the array of indices that sort this column i.e. It returns the index positions that can sort the above column i.e.
NumPy arrays can be sorted by a single column, row, or by multiple columns or rows using the argsort() function. The argsort function returns a list of indices that will sort the values in an array in ascending value.
Sort the rows of a 2D array in descending order The code axis = 1 indicates that we'll be sorting the data in the axis-1 direction, and by using the negative sign in front of the array name and the function name, the code will sort the rows in descending order.
Use .argsort()
it returns an numpy.array
of indices that sort the given numpy.array
. You call it as a function or as a method on your array. For example, suppose you have
import numpy as np arr = np.array([[-0.30565392, -0.96605562], [ 0.85331367, -2.62963495], [ 0.87839643, -0.28283675], [ 0.72676698, 0.93213482], [-0.52007354, 0.27752806], [-0.08701666, 0.22764316], [-1.78897817, 0.50737573], [ 0.62260038, -1.96012161], [-1.98231706, 0.36523876], [-1.07587382, -2.3022289 ]])
You can now call .argsort()
on the column you want to sort, and it will give you an array of row indices that sort that particular column which you can pass as an index to your original array.
>>> arr[arr[:, 1].argsort()] array([[ 0.85331367, -2.62963495], [-1.07587382, -2.3022289 ], [ 0.62260038, -1.96012161], [-0.30565392, -0.96605562], [ 0.87839643, -0.28283675], [-0.08701666, 0.22764316], [-0.52007354, 0.27752806], [-1.98231706, 0.36523876], [-1.78897817, 0.50737573], [ 0.72676698, 0.93213482]])
You can equivalently use numpy.argsort()
>>> arr[np.argsort(arr[:, 1])] array([[ 0.85331367, -2.62963495], [-1.07587382, -2.3022289 ], [ 0.62260038, -1.96012161], [-0.30565392, -0.96605562], [ 0.87839643, -0.28283675], [-0.08701666, 0.22764316], [-0.52007354, 0.27752806], [-1.98231706, 0.36523876], [-1.78897817, 0.50737573], [ 0.72676698, 0.93213482]])
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