2017-03-06 2 views

Répondre

0

Que diriez-vous ceci:

a = np.random.randint(0,20,(n,n)) 
a 
# array([[10, 4, 6, 12, 6], 
#  [ 5, 19, 1, 11, 5], 
#  [ 6, 10, 11, 1, 2], 
#  [ 5, 3, 0, 9, 1], 
#  [13, 13, 3, 15, 3]]) 
io = np.argsort(sum(np.ogrid[:n,:n]).ravel()) 
out = np.empty_like(a) 
out.ravel()[io] = np.sort(a.ravel()) 
out 
# array([[ 0, 1, 1, 3, 6], 
#  [ 1, 2, 3, 6, 10], 
#  [ 3, 5, 6, 9, 11], 
#  [ 4, 5, 10, 12, 13], 
#  [ 5, 11, 13, 15, 19]]) 

Nous utilisons argsort sur la somme des x et des indices y (produit avec ogrid) pour établir l'ordre en diagonale. Les éléments triés de a sont ensuite placés dans cet ordre en utilisant l'indexation avancée.

+0

Génial, merci – saucypigeon