Сортировать каждый столбец списка, используя numpy.argsort в Python - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь отсортировать каждый столбец списка, используя numpy.argsort. Однако я получаю вывод, который не соответствует правильной сортировке. Название списка, который я пытаюсь отсортировать, - «CD». Ниже я предоставляю код, который я использую до сих пор, и неверный вывод.

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

Список CD приведен ниже.

[[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]]

и вывод

[[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]]

Я был бы очень признателен, если бы вы могли дать намек на то, что возможно идет не так.

РЕДАКТИРОВАТЬ

Я хочу получить индекс отсортированных столбцов. Не фактическое число. Извините, что не очистил это в первую очередь

Ответы [ 3 ]

1 голос
/ 07 ноября 2019

Рабочий (но медленный) метод получения того, что вы хотите:

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)

На самом деле вы хотите получить обратный аргумент, который вы можете найти в здесь .

0 голосов
/ 07 ноября 2019

Может быть, вы просто хотите отсортировать (вернуть отсортированную копию массива) вместо массива argsort (возвращает индексы, которые будут сортировать массив)?

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]])
0 голосов
/ 07 ноября 2019

numpy.argsort возвращает индекс отсортированного массива

Я думаю, что вы хотите 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]]
...