It is still possible to go faster :-)

```
In [15]: n_samples, n_features = 500, 20

In [17]: %%timeit
   ....: X1 = list(np.random.RandomState(0).normal(0, 1, (n_samples, n_features)))
   ....: X1.sort(key=lambda x: np.sum(x ** 2))
   ....: X1 = np.array(X1)
   ....: 
100 loops, best of 3: 8.34 ms per loop

In [18]: %%timeit 
   ....: X2 = np.random.RandomState(0).normal(0, 1, (n_samples, n_features))
   ....: idx = np.argsort(np.sum(X2 ** 2, axis=1))
   ....: X2 = X2[idx, :]
   ....: 
1000 loops, best of 3: 1.56 ms per loop
```