Questo potrebbe essere il modo più semplice e generico di fare ciò che si desidera. (Ho usato tre matrici qui, ma questo funzionerà su array di qualsiasi forma, siano essi due colonne o duecento).
import numpy as NP
fnx = lambda : NP.random.randint(0, 10, 6)
a, b, c = fnx(), fnx(), fnx()
abc = NP.column_stack((a, b, c))
keys = (abc[:,0], abc[:,1]) # sort on 2nd column, resolve ties using 1st col
indices = NP.lexsort(keys) # create index array
ab_sorted = NP.take(abc, indices, axis=0)
Uno scherzo w/lexsort è che è necessario specificare le chiavi in ordine inverso, vale a dire, mettere la seconda chiave primaria e la chiave secondaria di primo. Nel mio esempio, voglio ordinare usando la seconda colonna come chiave primaria, quindi la elenco seconda; la prima colonna risolve solo i legami, ma è elencata per prima).
@ YGA, l'array di input "a" avrà mai valori non univoci? Se sì, come vorresti che il tipo si comportasse in quel caso? Ordine arbitrario? Sorta stabile? Ordinamento secondario usando i valori corrispondenti nell'array "b"? –