Почему бы просто не отсортировать массив numpy, а затем прочитать нужные значения:
In [33]: np.sort(np.array([1,5,4,6,7,2,3,9]))[-3:]
Out[33]: array([6, 7, 9])
РЕДАКТИРОВАТЬ: видя, как вопрос теперь изменился, и вам нужны позиции и значения, используйте numpy.argsort
, чтобы получить индексы вместо значений:
In [43]: a=np.array([1,5,4,6,7,2,3,9])
In [44]: idx=np.argsort(a)
In [45]: topvals=idx[-3:]
In [46]: print topvals
[3 4 7]
In [47]: print a[topvals]
[6 7 9]