Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupérer index avec fonction max/min

Sujet résolu
    30 janvier 2011 à 18:45:52

    Bonjour,

    J'aurais une petite question concernant les fonctions max et min.
    Pour illustrer avec un exemple, serait-il possible d'avoir un équivalent de la fonction ci-dessous (qui n'est pas vraiment des plus pythonnesques) en utilisant la fonction min
    def get_min_index(m):
      min_index, mini = (0,0), m[0][0]
      for i in range(len(m)):
        for j in range(len(m)):
          if m[i][j] < mini:
             mini = m[i][j]
             min_index = (i,j)
      return min_index
    

    Bon, j'ai supposé ici que m était à deux dimensions, mais ce n'est pas vraiment le plus important.

    Merci d'avance pour vos réponses.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      30 janvier 2011 à 19:25:36

      Citation

      Bon, j'ai supposé ici que m était à deux dimensions, mais ce n'est pas vraiment le plus important.



      Au contraire je pense que c'est important de connaître la nature de m

      Citation

      Pour illustrer avec un exemple, serait-il possible d'avoir un équivalent de la fonction ci-dessous



      Que dois faire exactement cette fonction?

      • Partager sur Facebook
      • Partager sur Twitter
        30 janvier 2011 à 19:34:14

        Désolé, j'ai pensé que la fonction serait assez explicite. En fait je voudrais avoir l'index de la valeur la plus petite (ou plus grande) d'une liste (on va dire à deux dimensions), donc par exemple pour la matrice ci-dessous :
        <math>\(\begin{pmatrix} 8 & 4 & 3\\ 9 & 0 & 6\\ 4 & 7 & 1 \end{pmatrix}\)</math>
        la valeur minimale <math>\(0\)</math> se situant à l'index (1,1), je voudrais récupérer cet index avec la fonction min plutôt que de créer une fonction qui ressemble plus à du C qu'autre chose. Au cas où, la matrice ci-dessus serait représenté en Python par une liste à deux dimensions, donc [[8, 4, 3], [9, 0, 6], [4, 7, 1]]

        Merci.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          30 janvier 2011 à 19:59:17

          Avec un exemple c'est mieux :)

          numpy le fait très bien

          >>> mat = np.array([[8, 4, 3],[9, 0, 6], [4, 7, 1]]) # création de la matrice
          >>> mat
          array([[8, 4, 3],
                 [9, 0, 6],
                 [4, 7, 1]])
          >>> mini = mat.argmin()
          >>> mini
          4 # index du minimum
          >>> mat.ravel()[mini]
          0 # récupération de la valeur mini
          


          Edit : J'utilise numpy
          • Partager sur Facebook
          • Partager sur Twitter
            30 janvier 2011 à 20:15:29

            Merci pour ta réponse.
            Je ne connais numpy que de nom mais ça me va très bien, merci.
            Finalement j'ai écrit la fonction pour les listes à deux dimensions comme ça :
            def get_min_index(m):
              mini, l = np.array(m).argmin(), len(m)
              return (mini // l, mini % l)
            

            Au cas où, si il y avait un moyen aussi efficace de faire ça avec les built-in ça m'intéresserait aussi, mais je mets quand même le sujet en résolu.
            Bonne soirée.
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              30 janvier 2011 à 23:41:49

              Je ne sais pas si c'est le plus optimal mais ça marche plutôt bien :

              def getimin(lists):
                  ls = []
                  for list in lists:
                      x = min(list)
                      ls.append((x, list.index(x)))
                  x = min(ls)
                  return x[1], ls.index(x)
              
              • Partager sur Facebook
              • Partager sur Twitter
                1 février 2011 à 20:38:13

                def get_min(liste, i=0):
                    foo = min(liste)
                    return (foo, i, liste.index(foo))
                
                def get_min_index(matrice):
                    return min([get_min(l, i) for i, l in enumerate(matrice)], key=lambda a:a[0])
                

                J'ai fait ca, mais il doit y avoir moyen de faire plus pythonic.
                • Partager sur Facebook
                • Partager sur Twitter
                yjltg.

                Récupérer index avec fonction max/min

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown