/ / Acquisition du tableau minimum sur plusieurs tableaux par ordre en Python - python, numpy

Acquisition du tableau Minimum sur plusieurs tableaux par ordre en Python - python, numpy

Dis que j'ai 4 tableaux numpy [1,2,3] [2,3,1] [3,2,1] [1,3,2]

Dans ce cas, j’ai déterminé [1,2,3] est le"tableau minimal" à mes fins, car il s’agit de l’un des deux tableaux dont la valeur est la plus faible à l’indice 0, et de ces deux tableaux, il possède le plus bas indice 1. S'il y avait plus de tableaux ayant des valeurs similaires, il faudrait comparer le valeurs d'index suivantes, etc.

Comment puis-je extraire le tableau [1,2,3] dans le même ordre de la pile?

Comment puis-je étendre cela aux tableaux x de taille n?

Merci

Réponses:

3 pour la réponse № 1

L'utilisation de python non-numpy .sort () ou trié () sur une liste de listes (et non de tableaux numpy) le fait automatiquement, p.

a = [[1,2,3],[2,3,1],[3,2,1],[1,3,2]]
a.sort()

donne

[[1,2,3],[1,3,2],[2,3,1],[3,2,1]]

La sorte numpy semble ne trier que les sous-matricesrécursivement, il semble que le meilleur moyen serait de le convertir en une liste python en premier. En supposant que vous ayez un tableau de tableaux que vous voulez sélectionner, vous pourriez obtenir le minimum,

sorted(a.tolist())[0]

Comme quelqu'un l'a fait remarquer, vous pouvez aussi faire min(a.tolist()) qui utilise le même type de comparaisons que le tri et serait plus rapide pour les grands tableaux (temps d'exécution linéaire vs n journal n asymptotique).


0 pour la réponse № 2

Voici une idée utilisant numpy:

import numpy

a = numpy.array([[1,2,3],[2,3,1],[3,2,1],[1,3,2]])

col = 0
while a.shape[0] > 1:
b = numpy.argmin(a[:,col:], axis=1)
a = a[b == numpy.min(b)]
col += 1

print a

Ceci vérifie colonne par colonne jusqu'à ce qu'il ne reste qu'une ligne.


0 pour la réponse № 3

Le lexsort de numpy est proche de ce que vous voulez. Il trie d’abord sur la dernière touche, mais c’est facile

>>> a = np.array([[1,2,3],[2,3,1],[3,2,1],[1,3,2]])
>>> order = np.lexsort(a[:, ::-1].T)
>>> order
array([0, 3, 1, 2])
>>> a[order]
array([[1, 2, 3],
[1, 3, 2],
[2, 3, 1],
[3, 2, 1]])