[Numpy-discussion] Sorting of an array row-by-row?

Joseph Fox-Rabinovitz jfoxrabinovitz at gmail.com
Fri Oct 20 10:11:06 EDT 2017


There are two mistakes in your PS. The immediate error comes from the
fact that lexsort accepts an iterable of 1D arrays, so when you pass
in arr as the argument, it is treated as an iterable over the rows,
each of which is 1D. 1D arrays do not have an axis=1. You actually
want to iterate over the columns, so np.lexsort(a.T) is the correct
phrasing of that. No idea about the speed difference.

   -Joe

On Fri, Oct 20, 2017 at 6:00 AM, Kirill Balunov <kirillbalunov at gmail.com> wrote:
> Hi,
>
> I was trying to sort an array (N, 3) by rows, and firstly come with this
> solution:
>
> N = 1000000
> arr = np.random.randint(-100, 100, size=(N, 3))
> dt = np.dtype([('x', int),('y', int),('z', int)])
>
> arr.view(dtype=dt).sort(axis=0)
>
> Then I found another way using lexsort function:
>
> idx = np.lexsort([arr[:, 2], arr[:, 1], arr[:, 0]])
> arr = arr[idx]
>
> Which is 4 times faster than the previous solution. And now i have several
> questions:
>
> Why is the first way so much slower?
> What is the fastest way in numpy to sort array by rows?
> Why is the order of keys in lexsort function reversed?
>
> The last question  was really the root of the problem for me with the
> lexsort function.
> And I still can not understand the idea of such an order (the last is the
> primary), it seems to me confusing.
>
> Thank you!!! With kind regards, Kirill.
>
> p.s.: One more thing, when i first try to use lexsort. I catch this strange
> exception:
>
> np.lexsort(arr, axis=1)
>
> ---------------------------------------------------------------------------
> AxisError                                 Traceback (most recent call last)
> <ipython-input-278-5162b6ccb8f6> in <module>()
> ----> 1 np.lexsort(ls, axis=1)
>
> AxisError: axis 1 is out of bounds for array of dimension 1
>
>
>
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at python.org
> https://mail.python.org/mailman/listinfo/numpy-discussion
>


More information about the NumPy-Discussion mailing list