2016-04-27 4 views
2

Comment trier une matrice par la norme de ses lignes efficacement (en utilisant numpy.ndarrays)?Trier un tableau 2D numérique (symétrique) par fonction. (norme)

Je veux trier la matrice A:

A = np.array(([ 10, 1, 6, 3 ], 
       [ 1,12, 2, 4 ], 
       [ 6, 2,14, 5 ], 
       [ 3, 4, 5, 9 ])) 

par la norme de ses lignes.

Ce que je fais maintenant est de créer une liste de la norme et obtenir la liste d'index de cette liste et trier la matrice basée sur cette liste d'index. Est-ce le chemin à parcourir?

indexlist = np.argsort(np.apply_along_axis(np.linalg.norm, 0, A)) 
#indexlist = array([3, 0, 1, 2]) 

puis ma liste triée.

sortedA = A[indexlist] 

et symétrique liste triée serait alors

sym_sortedA = A[indexlist][:,indexlist] 

Répondre

2

Oui, c'est la façon la plus courante de le faire. Un peu plus courte serait d'utiliser

indexlist = np.argsort(np.linalg.norm(A,axis=1)) 

Vous devez utiliser axe = 1 si vous voulez trier les lignes, mais étant donné que la matrice est symétrique qui n'a pas d'importance.