<div dir="ltr"><div><div><div><div><div><div><div><div><div><div>Hi,<br><br></div>I was trying to sort an array (N, 3) by rows, and firstly come with this solution:<br></div><div><br></div><div><span style="font-family:monospace,monospace">N = 1000000</span><br></div><span style="font-family:monospace,monospace">arr = np.random.randint(-100, 100, size=(N, 3))<br>dt = np.dtype([('x', int),('y', int),('z', int)])<b><br><br>arr.view(dtype=dt).sort(axis=0)<br></b></span><span style="font-family:arial,helvetica,sans-serif"><b><br></b></span></div><span style="font-family:arial,helvetica,sans-serif">Then I found another way<b> </b>using </span><span style="font-family:monospace,monospace">lexsort</span><span style="font-family:arial,helvetica,sans-serif"> function</span><span style="font-family:monospace,monospace"><b>:<br><br></b></span></div><span style="font-family:monospace,monospace"><b>idx = np.lexsort([arr[:, 2], arr[:, 1], arr[:, 0]])<br></b></span></div><span style="font-family:monospace,monospace"><b>arr = arr[idx]<br></b></span><span style="font-family:arial,helvetica,sans-serif"><b><br></b></span></div><span style="font-family:arial,helvetica,sans-serif">Which is 4 times faster than the previous solution. And now i have several questions:<br><br></span></div><span style="font-family:arial,helvetica,sans-serif">Why is the first way so much slower?<br></span></div><span style="font-family:arial,helvetica,sans-serif">What is the fastest way in <span style="font-family:monospace,monospace">numpy</span> to sort array by rows?</span><b><span style="font-family:monospace,monospace"><br></span></b></div><span style="font-family:arial,helvetica,sans-serif">Why is the order of <span style="font-family:monospace,monospace">keys</span> in <span style="font-family:monospace,monospace">lexsort</span> function reversed?</span><b><span style="font-family:monospace,monospace"><br></span><span style="font-family:arial,helvetica,sans-serif"><br></span></b></div><pre class="gmail-tw-data-text gmail-tw-ta gmail-tw-text-small" id="gmail-tw-target-text" style="text-align:left;height:48px" dir="ltr"><span style="font-family:arial,helvetica,sans-serif"><span lang="en">The last question </span></span><span style="font-family:arial,helvetica,sans-serif"><span lang="en"><span style="font-family:arial,helvetica,sans-serif"><span lang="en"> was </span></span>really the root of the problem for me with the <span style="font-family:monospace,monospace">lexsort </span>function.<br></span><span lang="en">And I still can not understand the idea of ​​such an order (the last is the primary), it seems to me confusing.<br><br></span></span></pre><pre class="gmail-tw-data-text gmail-tw-ta gmail-tw-text-small" id="gmail-tw-target-text" style="text-align:left;height:48px"><span style="font-family:arial,helvetica,sans-serif"><span lang="en">Thank you!!! With kind regards, Kirill.<br></span></span></pre><pre class="gmail-tw-data-text gmail-tw-ta gmail-tw-text-small" id="gmail-tw-target-text" style="text-align:left;height:48px"><span style="font-family:arial,helvetica,sans-serif"><span lang="en">p.s.: One more thing, when i first try to use<span style="font-family:monospace,monospace"> lexsort</span>. I catch this strange exception:<br><span style="font-family:monospace,monospace"><br><b>np.lexsort(arr, axis=1)</b><br></span></span></span><span style="font-family:monospace,monospace"><br><span lang="en"><span class="gmail-ansi-red-intense-fg gmail-ansi-bold">---------------------------------------------------------------------------</span>
<span class="gmail-ansi-red-intense-fg gmail-ansi-bold">AxisError</span>                                 Traceback (most recent call last)
<span class="gmail-ansi-green-intense-fg gmail-ansi-bold"><ipython-input-278-5162b6ccb8f6></span> in <span class="gmail-ansi-cyan-fg"><module></span><span class="gmail-ansi-blue-intense-fg gmail-ansi-bold">()</span>
<span class="gmail-ansi-green-intense-fg gmail-ansi-bold">----> 1</span><span class="gmail-ansi-yellow-intense-fg gmail-ansi-bold"> </span>np<span class="gmail-ansi-yellow-intense-fg gmail-ansi-bold">.</span>lexsort<span class="gmail-ansi-yellow-intense-fg gmail-ansi-bold">(</span>ls<span class="gmail-ansi-yellow-intense-fg gmail-ansi-bold">,</span> axis<span class="gmail-ansi-yellow-intense-fg gmail-ansi-bold">=</span><span class="gmail-ansi-cyan-intense-fg gmail-ansi-bold">1</span><span class="gmail-ansi-yellow-intense-fg gmail-ansi-bold">)</span>

<span class="gmail-ansi-red-intense-fg gmail-ansi-bold">AxisError</span>: axis 1 is out of bounds for array of dimension 1<br></span></span></pre><pre class="gmail-tw-data-text gmail-tw-ta gmail-tw-text-small" id="gmail-tw-target-text" style="text-align:left;height:48px"><span style="font-family:monospace,monospace"><span lang="en"></span></span><span style="font-family:arial,helvetica,sans-serif"><span lang="en"></span></span><span style="font-family:monospace,monospace"></span><br><span style="font-family:monospace,monospace"></span></pre><div><div><div><div><div><div><span style="font-family:monospace,monospace"><b><br></b></span></div></div></div></div></div></div></div>