Partage
  • Partager sur Facebook
  • Partager sur Twitter

fonction brute de scipy...

    19 mars 2015 à 2:08:20

    Bonjour tous,

    j'essai d'utiliser la fonction brute de scipy et j'ai quelque problèmes...

    Cette fonction est censée générer une grille de points à partir de bornes que je lui donne et lancer des calculs. Le problème est que je ne comprends pas du tout comment la grille est générée???

    en faisant ceci :
    rranges=[]
    rranges.append([-4, 4, 3])
    rranges.append([1.9, 2, 1])

    je m'attendais à avoir 3 points entre -4 et 4 et un point entre 1.9 et 2 (donc un vecteur de données et pas une grille) mais à l'utilisation je me rend compte que je n'ai pas du tout ceci.... comment faire pour avoir ce que je souhaite ?

    Pourriez vous m'expliquer la logique de ces rranges que je ne comprends pas du tout...

    merci



    from scipy.optimize import brute
    def residuals8(p, y, x):
            err1 = y-p[0]*np.exp(-p[1]*x)
            err=sum(abs(err1))
    x=np.linspace(0,50,40)
    y_true=5*np.exp(-0.1*x)
    y_meas=y_true+np.random.rand(len(x))
    rranges=[]
    rranges.append([-4, 4, 3])
    rranges.append([1.9, 2, 1])
    outOpt,localResidu,grid,jout= brute(residuals8, rranges, args=(y_meas, x),full_output=1)
    
    • Partager sur Facebook
    • Partager sur Twitter
      20 mars 2015 à 11:21:55

      La doc explique que l'argument rrange est un tuple contenant soit:

      • un objet slice
      • un tuple contenant les bornes dans la format (low, high)

      Toi tu passes des listes... Donc c'est déjà pas bon.

      De plus, il est aussi expliqué que la fonction à passer doit avoir la forme f(x, *args), et toi ta fonction n'a pas cette signature, mais f(p, y, x). Tu dois la ré-écrire pour avoir qqch comme

      def residuals8(z, *args):
      
      x, y = z
      p0, p1 = args
      # ...
      return err # tu ne retournais rien dans ta fonction.
      
      </pre>

      La création de la grid se fait avec les slices que tu passes à rrange. Dans l'exemple de la doc, ils passent rranges = (slice(-4, 4, 0.25), slice(-4, 4, 0.25)). Ca va donc passer des points pour (x, y) compris entre -4 et 4 (exclus) avec des pas de 0.25.

      -
      Edité par Dan737 20 mars 2015 à 14:45:25

      • Partager sur Facebook
      • Partager sur Twitter

      fonction brute de scipy...

      × 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