dalmeida13 - 4 years ago 229

Python Question

I have the following array:

`arr = array([[ 1., 3.],`

[ 6., 6.],

[ 3., 0.],

[ 2., 5.],

[ 0., 3.],

[ 3., 3.],

[ 0., 6.]])

wich contains X and Y coordinates.

I would like to know how can I sort this array by first sorting X and after by sorting Y. I would like something like this:

`new_ arr = array([[ 0., 3.],`

[ 0., 6.],

[ 1., 3.],

[ 2., 5.],

[ 3., 0.],

[ 3., 3.],

[ 6., 6.]])

Recommended for you: Get network issues from **WhatsUp Gold**. **Not end users.**

Answer Source

You can use the np lexort function, you can read more in here

numpy.lexsort(keys, axis=-1) Perform an indirect sort using a sequence of keys.

Given multiple sorting keys, which can be interpreted as columns in a spreadsheet, lexsort returns an array of integer indices that describes the sort order by multiple columns. The last key in the sequence is used for the primary sort order, the second-to-last key for the secondary sort order, and so on. The keys argument must be a sequence of objects that can be converted to arrays of the same shape. If a 2D array is provided for the keys argument, itâ€™s rows are interpreted as the sorting keys and sorting is according to the last row, second last row etc

```
import numpy as np
arr = np.array([[ 1., 3.],
[ 6., 6.],
[ 3., 0.],
[ 2., 5.],
[ 0., 3.],
[ 3., 3.],
[ 0., 6.]])
ind = np.lexsort(np.transpose(arr)[::-1])
print (arr[ind])
>>>[[ 0. 3.]
[ 0. 6.]
[ 1. 3.]
[ 2. 5.]
[ 3. 0.]
[ 3. 3.]
[ 6. 6.]]
```

Recommended from our users: **Dynamic Network Monitoring from WhatsUp Gold from IPSwitch**. ** Free Download**