Permutando los índices de matriz 2d de numpy

¿Hay alguna función numpy o uso inteligente de las vistas para lograr lo que hace la siguiente función?

 import numpy as np

 def permuteIndexes(array, perm):
     newarray = np.empty_like(array)
     max_i, max_j = newarray.shape
     for i in xrange(max_i):
         for j in xrange(max_j):
             newarray[i,j] = array[perm[i], perm[j]]
     return newarray

Es decir, para una permutación dada de los índices de la matriz en una lista perm, esta función calcula el resultado de aplicar esta permutación a los índices de una matriz.

preguntado el 24 de agosto de 12 a las 19:08

1 Respuestas

def permutateIndexes(array, perm):
    return array[perm][:, perm]

En realidad, esto es mejor ya que lo hace de una sola vez:

def permutateIndexes(array, perm):
    return array[np.ix_(perm, perm)]

Para trabajar con matrices no cuadradas:

def permutateIndexes(array, perm):
    return array[np.ix_(*(perm[:s] for s in array.shape))]

Respondido 24 ago 12, 19:08

hummm! Debo aprender a usar esas vistas correctamente. ¿Hay alguna guía por ahí? - Rafael S. Calsaverini

@RafaelS.Calsaverini definitivamente leyó el Tutorial tentativo de NumPy si aún no lo ha hecho. - ecatmur

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.