Здесь есть две проблемы; во-первых, np.argsort
возвращает массив индексов, которые сортируют исходный массив, во-вторых, он не изменяет исходный массив, а просто дает вам другой. Этот интерактивный сеанс должен помочь объяснить:
In [59]: arr = [5,3,7,2,6,34,46,344,545,32,5,22]
In [60]: np.argsort(arr)
Out[60]: array([ 3, 1, 0, 10, 4, 2, 11, 9, 5, 6, 7, 8])
Выше [3, 1, 0, ...]
означает, что элемент 3
в исходном списке должен стоять первым (2
), затем должен идти элемент 2
(3
), затем первым (индекс 0
, элемент 5
) и так далее. Обратите внимание, что arr
по-прежнему не затрагивается:
In [61]: arr
Out[61]: [5, 3, 7, 2, 6, 34, 46, 344, 545, 32, 5, 22]
Вам может не понадобиться этот массив индексов, и вам будет проще просто использовать np.sort
:
In [62]: np.sort(arr)
Out[62]: array([ 2, 3, 5, 5, 6, 7, 22, 32, 34, 46, 344, 545])
Но это по-прежнему оставляет arr
в покое:
In [68]: arr
Out[68]: [5, 3, 7, 2, 6, 34, 46, 344, 545, 32, 5, 22]
Если вы хотите сделать это на месте (изменить оригинал), используйте:
In [69]: arr.sort()
In [70]: arr
Out[70]: [2, 3, 5, 5, 6, 7, 22, 32, 34, 46, 344, 545]
06.11.2013
np.sort(arr)
возвращает копию отсортированного массива, а не сортировку на месте. 06.11.2013arr.sort()
, в конце концов, посколькуnp.sort(arr)
оставляетarr
в покое. 10.11.2013