Numpy.argsort - can't see what's wrong

前端 未结 2 929
无人及你
无人及你 2021-01-03 11:23

I am trying to sort a numpy array using the argsort function.

Unfortunately this is not working and I can\'t see why :(

The code is:

import n         


        
相关标签:
2条回答
  • 2021-01-03 12:00

    distance.argsort() returns an array of indices. The ith index does not tell you the rank of the ith element in distance. Rather, the ith index tells you that the ith element in the sorted array is distance[i].

    In other words,

    idx = distance.argsort()
    assert (distance[idx] == np.sort(distance)).all()
    

    Consider this small example from the docs:

    In [236]: x = np.array([3, 1, 2])
    
    In [237]: np.argsort(x)
    Out[237]: array([1, 2, 0])
    
    In [238]: x[np.argsort(x)]
    Out[238]: array([1, 2, 3])
    
    In [239]: x[1], x[2], x[0]
    Out[239]: (1, 2, 3)
    

    Calling argsort twice does gives you the rank of the ith element in distance:

    In [240]: np.argsort(np.argsort(x))
    Out[240]: array([2, 0, 1])
    

    Understanding how this works is a good test of your understanding of argsort. However, calling argsort twice to find the rank is inefficient. Especially for larger arrays there are other, faster, ways to find the rank.

    0 讨论(0)
  • 2021-01-03 12:05

    The following works for me:

    distance.sort()
    

    which returns

    array([ 25.54,  27.49,  27.77,  28.36,  29.  ,  29.6 ,  29.77,  30.26,
            30.29,  30.77,  31.4 ,  32.04,  32.04,  32.26,  32.33,  32.33,
            32.65,  32.72,  33.01,  33.62,  33.62,  34.  ,  34.12,  34.33,
            34.6 ,  34.6 ,  35.24,  35.54,  35.89,  36.01,  36.01,  36.5 ,
            36.56,  36.56,  36.9 ,  36.97,  37.01,  37.25,  37.25,  37.57,
            37.61,  37.96,  38.16,  38.26,  38.26,  38.6 ,  38.65,  38.74,
            39.2 ,  39.25,  39.29,  39.7 ,  39.77,  40.33,  40.33,  40.36,
            40.36,  40.4 ,  40.45,  40.45,  40.45,  40.72,  40.72,  40.84,
            40.84,  40.9 ,  40.93,  40.93,  40.93,  40.93,  41.48,  41.49,
            41.78,  42.5 ,  42.85,  43.28,  43.29,  43.81,  43.81,  43.85,
            43.97,  44.37,  44.37,  44.41,  44.98,  45.  ,  45.05,  45.05,
            45.05,  45.62,  45.94,  45.94,  46.21,  46.21,  46.28,  46.85,
            46.93,  46.98,  47.53,  47.56,  47.89,  48.1 ,  48.25,  48.8 ,
            48.8 ,  49.37,  49.64,  50.  ,  50.09,  50.57,  50.58,  50.58,
            51.14,  51.2 ,  51.2 ,  51.25,  51.25,  51.25,  51.25,  51.85,
            51.97,  52.49,  52.56,  53.89,  53.89,  54.08,  54.5 ,  54.5 ,
            54.5 ,  55.24,  55.78,  55.78,  56.48,  57.22,  57.22,  57.22,
            57.85,  59.24,  59.41,  60.84,  61.7 ,  62.08,  62.6 ,  64.8 ,
            66.05,  66.76,  67.13,  68.29,  73.73,  76.85])
    
    0 讨论(0)
提交回复
热议问题