Sort each column of a list using numpy.argsort in python

numpy argsort descending
numpy sort multiple columns
python sort array by column
numpy argsort 2d array
numpy sort descending
python sorted
numpy sort by column index
numpy lexsort

I am trying to sort each column of a list using the numpy.argsort. However, I am getting an output that does not match the correct sorting. The name of the list that I am trying to sort is "CD". Below, I am providing the code that I am using so far and the incorrect output.

print(numpy.argsort(CD,axis=0))

The CD list the one below.

[[90, 85, 71, 48], 
[28, 75, 2, 71], 
[5, 93, 15, 56], 
[59, 91, 29, 43], 
[28, 24, 82, 35], 
[13, 102, 77, 21], 
[85, 102, 33, 64], 
[80, 66, 64, 30], 
[91, 78, 41, 1], 
[77, 33, 30, 50]]

and the output is

[[2 4 1 8]
 [5 9 2 5]
 [1 7 3 7]
 [4 1 9 4]
 [3 8 6 3]
 [9 0 8 0]
 [7 3 7 9]
 [6 2 0 2]
 [0 5 5 6]
 [8 6 4 1]]

I would really appreciate if you could give a hint of what possibly goes wrong.

EDIT

I want to get the index of the sorted columns. Not the actual number. Sorry for not clearing this out in the first place

A working (but slow) method of getting what you want:

np.argsort(np.argsort(x, axis = 0), axis = 0)
Out[]: 
array([[8, 5, 7, 5],
       [2, 3, 0, 9],
       [0, 7, 1, 7],
       [4, 6, 2, 4],
       [3, 0, 9, 3],
       [1, 8, 8, 1],
       [7, 9, 4, 8],
       [6, 2, 6, 2],
       [9, 4, 5, 0],
       [5, 1, 3, 6]], dtype=int64)

What you want is actually an inverse argsort, which you can find a lot of information on here

Sorting Arrays, All are means of accomplishing a similar task: sorting the values in a list or array. By default np.sort uses an O[NlogN], quicksort algorithm, though mergesort A related function is argsort , which instead returns the indices of the sorted elements: Keep in mind that this treats each row or column as an independent array,� It returns an array of indices of the same shape as arr that that would sort the array. Syntax : numpy.argsort(arr, axis=-1, kind=’quicksort’, order=None) Parameters : arr : [array_like] Input array. axis : [int or None] Axis along which to sort. If None, the array is flattened before sorting. The default is -1, which sorts along the last axis.

numpy.argsort returns the index of the sorted array

I think what you want is numpy.sort

print(numpy.sort(CD,axis=0))
# [[  5  24   2   1]
#  [ 13  33  15  21]
#  [ 28  66  29  30]
#  [ 28  75  30  35]
#  [ 59  78  33  43]
#  [ 77  85  41  48]
#  [ 80  91  64  50]
#  [ 85  93  71  56]
#  [ 90 102  77  64]
#  [ 91 102  82  71]]

a.sort(), sorted(a), np.argsort(a) and np.lexsort(b, a) in Python, a.sort(), sorted(a), np.argsort(a) and np.lexsort(b, a) in Python. These are all different types for sorting techniques that behave very differently. (i) Creates a new list from the old & returns the new one, sorted print ( 'column a, column b' ). OUTPUT:np.lexsort((b, a)) column a, column b 9 4 3 6 1 9 3 2 4 1 3 8 6 7 Sorted indices-> [2 3 1 5 4 6 0] This article is contributed by SHAURYA UPPAL . If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org.

Maybe you just want to sort (Return a sorted copy of an array) the array instead of argsort (Returns the indices that would sort an array)?

np.sort(cd, axis=1)
#array([[ 48,  71,  85,  90],
#       [  2,  28,  71,  75],
#       [  5,  15,  56,  93],
#       [ 29,  43,  59,  91],
#       [ 24,  28,  35,  82],
#       [ 13,  21,  77, 102],
#       [ 33,  64,  85, 102],
#       [ 30,  64,  66,  80],
#       [  1,  41,  78,  91],
#       [ 30,  33,  50,  77]])
np.sort(cd, axis=0)
#array([[  5,  24,   2,   1],
#       [ 13,  33,  15,  21],
#       [ 28,  66,  29,  30],
#       [ 28,  75,  30,  35],
#       [ 59,  78,  33,  43],
#       [ 77,  85,  41,  48],
#       [ 80,  91,  64,  50],
#       [ 85,  93,  71,  56],
#       [ 90, 102,  77,  64],
#       [ 91, 102,  82,  71]])

numpy.argsort() in Python, numpy.argsort() function is used to perform an indirect sort along the given axis using the algorithm specified by the kind keyword. It returns an array of indices of � a.sort, sorted (a), np_argsort (a) and np.lexsort (b, a) in Python Python Server Side Programming Programming Ordering of data elements in a specific order is a frequently needed operation. To sort elements in an array, python uses the functions named sorted () and array.sort ().

numpy.argsort — NumPy v1.19 Manual, A single field can be specified as a string, and not all fields need be specified, but unspecified Apply index_array from argsort to an array as if by calling sort. Now get the array of indices that sort this column i.e. arr2D[:,columnIndex].argsort() It returns the index positions that can sort the above column i.e. [1 2 0] It means for sorting column at index position 1 use following order of rows : [1 2 0] So, to change the positioning of rows based on values returned by argsort().

How to sort the rows of a NumPy array by a column in Python, Use numpy.argsort() to sort the rows of a NumPy array by a column. Use the syntax array[:, j - 1] to extract� numpy.argsort(a, axis=-1, kind=None, order=None) [source] ¶ Returns the indices that would sort an array. Perform an indirect sort along the given axis using the algorithm specified by the kind keyword. It returns an array of indices of the same shape as a that index data along the given axis in sorted order.

Python NumPy For Your Grandma | Section 4.6, 4.3 all and any 4.4 concatenate 4.5 Stacking 4.6 Sorting 4.7 unique � Challenges. This video covers how to sort a NumPy array using the sort() function. 1])] # sort by column 1 ascending boo[np.argsort(-boo[:, -1])] # sort by� In this program, you will learn how to write a program to sort arrays using numpy. First we need to import the numpy library then we have to use numpy.sort function to sort the values. Syntax: numpy.sort(a, axis=-1, kind=’quicksort’, order=None) This function return a sorted copy of an array. Parameters: a : array_like Array to be sorted.

Comments
  • What element do you want to sort the columns on? The first element? Or do you want to keep the columns in place and sort each one? The question is still very unclear; can you give an example of what CD looks like once it is sorted?