considérez le code suivant :
a = np.aléatoire.aléatoire([5,5])
ind = np.argsort(a, axe=1)
a_sorted = a[ind]
np.sort(a, axe=1)
maintenant a_sorted et a devraient être tous les deux triés le long de l'axe 1. Cependant, même les formes ne sont plus identiques. a est toujours de (5,5) tandis que a_sorted est de (5,5,5). Si c'est le comportement voulu, quelqu'un peut-il me dire pourquoi ?
argsort()
fonctionne bien, mais l'indexation ne fonctionne pas comme vous l'attendez.
http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#advanced -indexing
Essaye ça:
a = np.random.random([5,5])
i = np.arange(len(a))[:, np.newaxis]
j = np.argsort(a, axis=1)
a_sorted = a[i, j]
np.sort(a, axis=1)
J'étais confus de la même manière. La documentation indique spécifiquement,
Retour
index_array : ndarray, entier
Tableau d'indices qui trienta
long de l'axe spécifié.
En d'autres termes,a[index_array]
donne una
trié.
Ce qui ne s'applique qu'à un tableau 1D. La documentation doit-elle être étendue pour préciser que ce n'est pas le cas pour les baies ND ?
@lzkelley Oui, un patch pour améliorer la documentation serait le bienvenu.
@shoyer cool, je vais faire un PR pour ça et mettre à jour
Ce serait bien s'il y avait un exemple sur la façon d'utiliser réellement la sortie pour trier le tableau ND.
Ce serait aussi bien s'il y avait une solution plus lisible que a[np.arange(np.shape(a)[0])[:,np.newaxis], np.argsort(a)]
Peut-être que @seberg pourrait en faire l'un de ses ajouts de fonction d'indexation.
Je ne pense pas que cela convienne très clairement à l'indexation, une fonction de sélection ou alors est probablement une correspondance plus facile.
+1 pour une nouvelle fonction.
L'objectif de argsort
(par opposition à sort
) ne doit-il pas être utilisé pour l'indexation ?
argsort
fournit les index pour trier le long d'un axe, mais en fait, trier le long de cet axe à l'aide des index semble inutilement verbeux. A moins qu'il existe un moyen plus simple que je ne connais pas.
une fonction de sélection ou alors est probablement une correspondance plus facile.
C'est #8708
Commentaire le plus utile
Ce serait bien s'il y avait un exemple sur la façon d'utiliser réellement la sortie pour trier le tableau ND.
Ce serait aussi bien s'il y avait une solution plus lisible que
a[np.arange(np.shape(a)[0])[:,np.newaxis], np.argsort(a)]