[Numpy-discussion] Sorting of an array row-by-row?
kirillbalunov at gmail.com
Fri Oct 20 15:03:37 EDT 2017
Thank you Josef, you gave me an idea, and now the fastest version (for big
arrays) on my laptop is:
For me the most strange thing is the order of keys, what was an idea to
keep then right-to-left? How does this relate to lexicographic order*?*
2017-10-20 17:11 GMT+03:00 Joseph Fox-Rabinovitz <jfoxrabinovitz at gmail.com>:
> 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.
> On Fri, Oct 20, 2017 at 6:00 AM, Kirill Balunov <kirillbalunov at gmail.com>
> > 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
> > 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
> > exception:
> > np.lexsort(arr, axis=1)
> > ------------------------------------------------------------
> > AxisError Traceback (most recent call
> > <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
> NumPy-Discussion mailing list
> NumPy-Discussion at python.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the NumPy-Discussion