[Numpy-discussion] Right way to do fancy indexing from argsort() result?

Robert Kern robert.kern at gmail.com
Mon Mar 26 14:28:53 EDT 2018


On Mon, Mar 26, 2018 at 11:24 AM, Benjamin Root <ben.v.root at gmail.com>
wrote:
>
> I seem to be losing my mind... I can't seem to get this to work right.
>
> I have a (N, k) array `distances` (along with a bunch of other arrays of
the same shape). I need to resort the rows, so I do:
>
> indexs = np.argsort(distances, axis=1)
>
> How do I use this index array correctly to get back distances sorted
along rows? Note, telling me to use `np.sort()` isn't going to work because
I need to apply the same indexing to a couple of other arrays.
>
> new_dists = distances[indexs]
>
> gives me a (N, k, k) array, while
>
> new_dists = np.take(indexs, axis=1)
>
> gives me a (N, N, k) array.
>
> What am I missing?

Broadcasting!

  new_dists = distances[np.arange(N)[:, np.newaxis], indexs]

--
Robert Kern
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20180326/a1b5619c/attachment-0001.html>


More information about the NumPy-Discussion mailing list