np.argsort(A)
сортирует каждую строку A
отдельно. Например,
In [21]: np.argsort([[6,5,4],[3,2,1]])
Out[21]:
array([[2, 1, 0],
[2, 1, 0]])
Вместо этого вы хотите сгладить свой массив в одномерный массив значений, а затем отсортировать его. Это можно сделать, установив для параметра axis
значение None
(спасибо @Akavall за указание на это):
In [23]: np.argsort(A, axis=None)
Out[23]: array([3, 0, 1, 2])
Затем используйте np.unravel_index. чтобы восстановить связанный индекс в A
.
In [14]: import numpy as np
In [15]: A = np.array([[7, 8], [9, 5]])
In [4]: np.column_stack(np.unravel_index(np.argsort(A, axis=None)[::-1], A.shape))
Out[4]:
array([[1, 0],
[0, 1],
[0, 0],
[1, 1]])
Обратите внимание, что для NumPy версии 1.5.1 или старше np.unravel_index
вызывает ошибку ValueError, если в качестве первого аргумента передается массивоподобный объект. В этом случае вы можете использовать понимание списка:
In [17]: [np.unravel_index(p, A.shape) for p in np.argsort(A, axis=None)[::-1]]
Out[17]: [(1, 0), (0, 1), (0, 0), (1, 1)]
person
unutbu
schedule
21.04.2013