numpy.argsort()
возвращает индексы массива, которые будут сортировать элементы массива. В случае наличия дублированных записей возвращаемые индексы зависят от типа алгоритма сортировки, который используется для сортировки массива. На основании этого выбора вы можете увидеть другие результаты, как показано ниже:
# input
In [90]: a
Out[90]:
array([1., 1., 1., 1., 0., 0., 1., 1., 0., 0., 0., 0., 1., 1., 0., 0., 1.,
0., 1., 1., 0., 1., 1., 0., 1.])
# more intuitive
In [85]: np.argsort(a, kind='mergesort')
Out[85]:
array([ 4, 5, 8, 9, 10, 11, 14, 15, 17, 20, 23, 0, 1, 2, 3, 6, 7,
12, 13, 16, 18, 19, 21, 22, 24])
# default choice
In [86]: np.argsort(a, kind='quicksort')
Out[86]:
array([20, 4, 5, 8, 9, 10, 11, 23, 17, 14, 15, 0, 22, 21, 19, 18, 12,
13, 7, 6, 3, 2, 1, 16, 24])
In [88]: np.argsort(a, kind='heapsort')
Out[88]:
array([17, 11, 20, 8, 15, 14, 23, 10, 4, 9, 5, 13, 6, 12, 24, 2, 21,
19, 18, 16, 7, 22, 3, 1, 0])
# more intuitive
In [89]: np.argsort(a, kind='stable')
Out[89]:
array([ 4, 5, 8, 9, 10, 11, 14, 15, 17, 20, 23, 0, 1, 2, 3, 6, 7,
12, 13, 16, 18, 19, 21, 22, 24])