8
votes

Tri de python (numpy) Tri

J'ai ce tableau, nommé v, de dtype ('float64'): xxx

... que j'ai acquis à partir d'un fichier à l'aide de la commande np.loadtxt . Je voudrais trier l'après les valeurs de la première colonne, sans mélanger la structure qui conserve les chiffres énumérés sur la même ligne ensemble. En utilisant v.sort (Axis = 0) me donne: xxx

... IE place le plus petit numéro de la troisième colonne de la première ligne, etc. Je préférerais quelque chose comme ça ... xxx

... où les éléments de chaque ligne n'ont pas été déplacés de manière relativement les uns aux autres.


0 commentaires

4 Réponses :


13
votes

Essayez xxx

(avec v étant le tableau). V [:, 0] est la première colonne et .argsort () renvoie les indices qui trieraient la première colonne. Vous appliquez ensuite cette commande à l'ensemble de la matrice en utilisant l'indexation avancée. Notez que vous obtenez une copie de la sorte de la matrice.

La seule façon dont je sais de trier la matrice en place est d'utiliser un dtype dtype: xxx / p>


0 commentaires

0
votes

Si vous avez des instances où v [:, 0] a des valeurs identiques et que vous souhaitez trier de manière secondaire sur les colonnes 1, 2, etc., puis vous voudrez utiliser numpy.lexsort () ou numpy.sort (v, ordre = ('col1' , 'col2', etc.) mais pour le boîtier = cas, v devra être un tableau structuré.


0 commentaires

5
votes

Alternativement

ESSAYER P>

Returns
-------
subarray : ndarray
    The returned array has the same type as `a`.

See Also
--------
ndarray.take : equivalent method

Examples
--------
>>> a = [4, 3, 5, 7, 6, 8]
>>> indices = [0, 1, 4]
>>> np.take(a, indices)
array([4, 3, 6])

In this example if `a` is an ndarray, "fancy" indexing can be used.

>>> a = np.array(a)
>>> a[indices]
array([4, 3, 6])


0 commentaires

0
votes

Un exemple d'application de numpy.lexsort () Pour trier les rangées d'un tableau et traite des liens dans la première colonne. Notez que lexsort trie efficacement les colonnes et commence par la dernière colonne, vous devez donc inverser les lignes de A , puis prenez la transposition avant le lexsort et enfin transpose le résultat (vous auriez pensé que cela devrait être plus facile, mais bon!): XXX

Merci à @Paul pour la suggestion d'utiliser lexsort .


0 commentaires