Comment passer de:Comment trier matrice diagonale
0 2 3
1 5 1
5 6 8
à
0 1 3
1 2 5
5 6 8
ou quelque chose de similaire?
Comment passer de:Comment trier matrice diagonale
0 2 3
1 5 1
5 6 8
à
0 1 3
1 2 5
5 6 8
ou quelque chose de similaire?
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.
Génial, merci – saucypigeon
Pourriez-vous expliquer ce que vous entendez par "tri diagonale"? L'exemple ne le rend pas clair ... – Praveen