IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Insertion de parametres dans un tableau [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 15
    Par défaut Insertion de parametres dans un tableau
    Bonjour,

    j'essaye difficilement de migrer de Fortran a Python, mais je sens que ma logique ne suit pas.

    Je fais une boucle dans laquelle je fit 3 parametres, et je souhaite rentrer ces 3 parametres dans un tableau, voici un extrait du code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ...
    rvs = []
    ...
        for k in range(1,4):
            ri,vi = init(x,y)
            si=1.
            guess=[ri,vi,si]
            pars, cov = curve_fit(f=fonc, xdata=x, ydata=y, p0=guess, bounds=(binf, bsup))
            rvs[k-1].append(pars[0],pars[1],pars[2])     <=======================================================
            stdevs = np.sqrt(np.diag(cov))
    ...
    L'erreur est au niveau de la fleche, avec le message:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    rvs[k-1].append(pars[0],pars[1],pars[2])
    IndexError: list index out of range
    pourtant le premier indice de mon tableau est bien zero (j'ai cru comprendre que ce message d'erreur correspondait a des indices de tableau qui n'existaient pas).
    J'ai essaye aussi de creer 3 tableaux sur le meme model, avec une "affectation" simple (rt=[] et rt[k-1].append(pars[0]) et meme au tout depart avec rt[k-1]=pars[0], mais ca ne fonctionne pas...
    Si vous pouvez me mettre sur la voie ce serait super!

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 831
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 831
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Merlin_II Voir le message
    pourtant le premier indice de mon tableau est bien zero (j'ai cru comprendre que ce message d'erreur correspondait a des indices de tableau qui n'existaient pas).
    Effectivement le message "list out of range" indique que tu dépasses la limite de ton tableau (en plus ou en moins car en python tu as droit aux index négatifs qui commencent alors à -1 pour le dernier élément). Et il est probable que ce message vienne de rvs[k-1] car rvs est un tableau vide (donc ne contient aucun élément pouvant être récupéré avec son indice)
    Tu as commis 2 erreurs
    • tu n'as pas étudié suffisement append() qui s'applique sur la liste et non pas sur un de ces éléments (sauf si cet élément est lui-même une liste) => rvs.append(truc) et non rvs[i].append(truc)
    • append() ne prend qu'un paramètre en compte. Si tu veux rajouter 3 trucs, il te faut faire 3 append() à suivre. Ou alors utiliser extend() qui lui accepte un itérable en paramètre pour étendre la liste sur laquelle il est appliqué =>rvs.extend((pars[0], pars[1], pars[2])) ou rvs.extend(pars[0:3]) ou rvs.extend(pars) si "pars" n'a que 3 éléments ou encore plus simplement rvs=list(pars) si rvs est créé from scratch

    Accessoirement je ne pige pas pourquoi tu fais varier k de 1 à 3 pour taper dans k-1 alors que tu aurais pu faire varier k de 0 à 2 directement...

    Citation Envoyé par Merlin_II Voir le message
    meme au tout depart avec rt[k-1]=pars[0], mais ca ne fonctionne pas...
    Interdit. Tu ne peux modifier par affectation directe qu'un élément déjà existant (donc ayant déjà un indice). L'agrandissement d'un tableau ne peut se faire qu'en utilisant des méthodes précises du tableau (append, extend, insert)

    Et en Python, les tableaux (sous-entendu "tableaux classiques des autres langages") se nomment "listes". Car il y a d'autres outils permettant de représenter plus ou moins les tableaux: les listes (ok les tableaux classiques donc), les tuples (listes non modifiables), les ensembles (tableaux ne contenant aucun élément dupliqué) et les dictionnaires (tableaux associatifs).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 15
    Par défaut
    Bonjour Sve@r,
    c'est effectivement ca, merci beaucoup, cela fonctionne maintenant!
    Je n'ai pas utiliser le extend (mais je note son existence!), j'ai donc mis rvs.append(pars) puisqu'effectivement pars n'a que 3 elements.
    Le passage Fortran (77!) a Pyhton reste difficile pour moi, et cette aide m'est tres precieuse pour ne pas me decourager et finalement rester a Fortran
    Merci beaucoup, je clos la discussion!

  4. #4
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 15
    Par défaut
    Bonjour Wiztricks,
    desole, la reponse est apparue entre-temps. Effectivement ca fait plus concis, mais a mon niveau, j'ai davantage besoin de clarte que de concision ^^' Mais ca ira mieux dans quelques temps avec ces aspects!
    Merci beaucoup!!

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 831
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 831
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Merlin_II Voir le message
    Je n'ai pas utiliser le extend (mais je note son existence!), j'ai donc mis rvs.append(pars) puisqu'effectivement pars n'a que 3 elements.
    Non, erreur !!!
    rvs.append(X) ajoute "X" au tableau "rvs". Si "X" est lui-même un tableau, alors rvs deviendra un tableau 2D (tableau à un élément où cet élément est lui-même un tableau)
    Dans ton cas, c'est (enfin il me semble) c'est rvs.extend(pars) qu'il faut écrire, ce qui se traduira alors par une extension 1D prise depuis le contenu de pars. Et la solution de wiztricks (qui m'était sortie de la tête tellement il y a de façons différentes de faire les choses en Python) fonctionnera aussi.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 15
    Par défaut
    Bonjour Sve@r,
    oui, ca fonctionnait avec append mais effectivement, ca me faisait des tableaux de tableaux, donc pas facile de retrouver mes petits ensuite. Avec extend, j'ai exactement ce qu'il me faut, rvs est bien un vecteur 1D
    Merci beaucoup!!

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Si rvs est une liste, rvs[k-1] en serait le (k-1)ième élément.
    Or si cette liste est vide, elle n'a aucun élément... et peut probable qu'il soit une liste.

    Après si le but est d'ajouter à cette liste les 3 premiers éléments de pars à chaque itération rvs += pars[:3] sera plus concis.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Prototype] Insertion de lignes dans un tableau
    Par rawsrc dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 17/12/2008, 13h20
  2. [MySQL] Insertion de donnée dans un tableau array
    Par guigui69 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 18/06/2008, 17h10
  3. Problème d'insertion d'image dans un tableau
    Par aminos40 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 2
    Dernier message: 01/06/2007, 09h54
  4. Réponses: 3
    Dernier message: 06/10/2006, 15h46
  5. [Tableaux] Insertion dynamique ligne dans un tableau
    Par masseur dans le forum Langage
    Réponses: 12
    Dernier message: 28/03/2006, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo