Sorting a python array/recarray by column

前端 未结 5 1550
旧巷少年郎
旧巷少年郎 2020-12-02 11:33

I have a fairly simple question about how to sort an entire array/recarray by a given column. For example, given the array:

import numpy as np
data = np.a         


        
相关标签:
5条回答
  • 2020-12-02 11:52

    To sort on the second column use itemgetter

    >>> from operator import itemgetter
    >>> data = [[5,2], [4,1], [3,6]]
    >>> sorted(data)
    [[3, 6], [4, 1], [5, 2]]
    >>> sorted(data,key=itemgetter(1))
    [[4, 1], [5, 2], [3, 6]]
    >>> 
    
    0 讨论(0)
  • 2020-12-02 11:57

    This is somewhat tricky:

    data[data[:,0].argsort()]
    
    # data[:,n] -- get entire column of index n
    # argsort() -- get the indices that would sort it
    # data[data[:,n].argsort()] -- get data array sorted by n-th column
    

    I found this recipe here:

    http://www.scipy.org/NumPy_for_Matlab_Users

    http://mathesaurus.sourceforge.net/matlab-numpy.html

    0 讨论(0)
  • 2020-12-02 12:05

    you are looking for operator.itemgetter

    >>> from operator import itemgetter, attrgetter
    
    >>> sorted(student_tuples, key=itemgetter(2))
    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
    
    >>> sorted(student_objects, key=attrgetter('age'))
    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
    

    i.e.

    In [7]: a
    Out[7]: [[5, 2], [4, 1], [3, 6]]
    
    In [8]: sorted(a, key=operator.itemgetter(0))
    Out[8]: [[3, 6], [4, 1], [5, 2]]
    
    0 讨论(0)
  • 2020-12-02 12:12

    Here's an extension that works with slices:

    import numpy as np
    x = np.array([[9, 1, 2],
                  [5, 3, 4],
                  [0, 5, 6]])
    

    Sorting by rows:

    x[:, x[1,:].argsort()] # Sort by second row
    
    array([[1, 2, 9]
           [3, 4, 5]
           [5, 6, 0]])
    

    Sorting by columns:

    x[x[:,0].argsort(), :] # Sort by first column
    
    array([[0, 5, 6],
           [5, 3, 4],
           [9, 1, 2]])
    
    0 讨论(0)
  • 2020-12-02 12:14

    Use data[np.argsort(data[:, 0])] where the 0 is the column index on which to sort:

    In [27]: import numpy as np
    
    In [28]: data = np.array([[5,2], [4,1], [3,6]])
    
    In [29]: col = 0
    
    In [30]: data=data[np.argsort(data[:,col])]
    Out[30]: 
    array([[3, 6],
           [4, 1],
           [5, 2]])
    
    0 讨论(0)
提交回复
热议问题