Ordene una matriz numpy por otra matriz, a lo largo de un eje particular, usando menos memoria

De la respuesta a esta pregunta , aprendí cómo ordenar las entradas de una matriz numpy a por los valores de otra matriz numpy b , a lo largo de un eje particular.

Sin embargo, este método requiere la creación de varias matrices intermedias que tienen el mismo tamaño que a , una para cada dimensión de a . Algunas de mis matrices son bastante grandes, y esto se vuelve inconveniente. ¿Hay alguna manera de lograr el mismo objective que usa menos memoria?

¿Una matriz de discos serviría a tus propósitos?

 >>> a = numpy.zeros((3, 3, 3)) >>> a += numpy.array((1, 3, 2)).reshape((3, 1, 1)) >>> b = numpy.arange(3*3*3).reshape((3, 3, 3)) >>> c = numpy.array(zip(a.flatten(), b.flatten()), dtype=[('f', float), ('i', int)]).reshape(3, 3, 3) >>> c.sort(axis=0) >>> c['i'] array([[[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8]], [[18, 19, 20], [21, 22, 23], [24, 25, 26]], [[ 9, 10, 11], [12, 13, 14], [15, 16, 17]]]) 

Una forma más limpia de generar la matriz acoplada:

 >>> c = numpy.rec.fromarrays([a, b], dtype=[('f', float), ('i', int)]) 

o

 >>> c = numpy.rec.fromarrays([a, b], names='f, i')