С abs
отображением отрицательных значений и смещением значений вычитания трудно представить, что происходит. Вместо этого мне нужно вычислить это шаг за шагом:
In [97]: x = np.array([100,50,-30,-50])
In [98]: x-43
Out[98]: array([ 57, 7, -73, -93])
In [99]: abs(x-43)
Out[99]: array([57, 7, 73, 93])
In [100]: np.argsort(abs(x-43))
Out[100]: array([1, 0, 2, 3])
In [101]: x[np.argsort(abs(x-43))]
Out[101]: array([ 50, 100, -30, -50])
argsort
- индексирование, которое помещает элементы в отсортированном порядке. Мы можем видеть это с:
In [104]: Out[99][Out[100]]
Out[104]: array([ 7, 57, 73, 93])
или
In [105]: np.array([57, 7, 73, 93])[[1, 0, 2, 3]]
Out[105]: array([ 7, 57, 73, 93])
How they work together
определяется синтаксисом Python; это прямо вперед.