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

Calcul scientifique Python Discussion :

Mauvaise dimension de listes


Sujet :

Calcul scientifique Python

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    octobre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2019
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Mauvaise dimension de listes
    Bonjour,

    Je débute avec Python, la réponse à ma question est peut-être triviale.

    J'ai un morceau de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    A=0
    B=[]
    for i in range(VAL1):
        for j in range(VAL1):
            P=0
            for k in range(VAL2):
                P = P + 2*(df[i][k]*df[j][k])
            if i != j:
                P = 2*P
            A=A+1
            B[A] = B.append(P)
    Atot=A
    VAL1 va de 0 à 3 dans mon DataFrame (dim 1x4)
    VAL2 va de 0 à 9 " " " " " " (dim 1x10)

    J'ai deux erreurs différentes:
    Pour la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     P = P + 2*(df[i][k]*df[j][k])
    j'ai un dépassement : il me dit que "10" n'existe pas dans df, effectivement, ça s'arrête à 9. Pourquoi veut-il aller de 0 à 10? Il ne devrait pas s'arrêter à 9?

    Et pour la ligne
    le message d'erreur me dit "out of range". Mais pourquoi? Je n'ai pas donné de limite à B pourquoi est-ce qu'il bloque?

    Aux personnes qui pourront m'aider à comprendre... Merci!

  2. #2
    Membre expérimenté
    Homme Profil pro
    Enseignant
    Inscrit en
    juin 2013
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2013
    Messages : 1 109
    Points : 1 500
    Points
    1 500
    Par défaut
    Des "print" judicieusement placés devraient pouvoir donner une indication de ce qui se passe.
    Pas d'aide par mp.

  3. #3
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    14 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 14 485
    Points : 24 505
    Points
    24 505
    Par défaut
    Citation Envoyé par liliestidine Voir le message
    j'ai un dépassement : il me dit que "10" n'existe pas dans df, effectivement, ça s'arrête à 9. Pourquoi veut-il aller de 0 à 10? Il ne devrait pas s'arrêter à 9?
    Les valeurs prises par i, j, k sont produites par range(VAL1), range(VAL2).
    A vous de vérifier (avec un print) que VAL1 et VAL2 sont bien plus petits que...

    Citation Envoyé par liliestidine Voir le message
    Et pour la ligne
    le message d'erreur me dit "out of range". Mais pourquoi? Je n'ai pas donné de limite à B pourquoi est-ce qu'il bloque?
    Parce que vous n'avez pas passé assez de temps pour comprendre comment fonctionnent les listes avec Python et que vous écrivez du code sans trop réfléchir. Lancez la console Python et créez un B:
    B est une liste vide.
    Et si elle est vide l'accès à un élément via son index va planter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> B[0]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: list index out of range
    >>> B[1]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: list index out of range
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    octobre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2019
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par marco056 Voir le message
    Des "print" judicieusement placés devraient pouvoir donner une indication de ce qui se passe.
    Merci pour la réponse.
    Avant de rajouter " P = P ...." j'avais mis des 'print' un peu partout histoire de voir ce qu'il se passait.
    Tout s'affiche bien .... jusqu'à la dernière valeur (forcément puisqu'elle n'existe pas). Je me retrouve avec un 'Keyerror : 10".

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    octobre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2019
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Les valeurs prises par i, j, k sont produites par range(VAL1), range(VAL2).
    A vous de vérifier (avec un print) que VAL1 et VAL2 sont bien plus petits que...
    Merci pour la réponse.
    C'est déjà vérifié. Ca commence bien à 0 et ça va bien jusqu'à 3 c'est pour cela que je ne comprends pas d'où sort ce '4'.

    [OUT] :
    VAL1 = 0 CALCUL = 4.667451043185921e-10
    VAL1 = 1 CALCUL = 1.342852708629632e-09
    VAL1 = 2 CALCUL = 1.7404738040985681e-09
    VAL1 = 3 CALCUL = 3.142938906063392e-09

    (...)

    KeyError: 4

    Surtout que du coup, mes 4 valeurs sont correctement calculées.



    Citation Envoyé par wiztricks Voir le message
    Parce que vous n'avez pas passé assez de temps pour comprendre comment fonctionnent les listes avec Python et que vous écrivez du code sans trop réfléchir. Lancez la console Python et créez un B:
    B est une liste vide.
    Et si elle est vide l'accès à un élément via son index va planter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> B[0]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: list index out of range
    >>> B[1]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: list index out of range
    - W
    Effectivement, on m'a plongée dans Python alors que je ne connais pas vraiment, je suis plus habituée au Fortran et j'ai du mal avec la synthaxe donc je fais un peu comme je peux. Il faut donc que je déclare ma matrice avec les bonnes dimensions, en la remplissant de zéros par exemple et y additionner au fur et à mesure ce que je vais calculer à chaque itération? Je ne savais pas qu'il fallait déclarer avec les dimensions, je pensais qu'on pouvait remplir au fur et à mesure comme on voulait vu que c'était vide. Je note.

  6. #6
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    octobre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2019
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Oui alors pardon, VAL1 et VAL2 ont été inversées de nombreuses fois, un coup je dis "10" un coup "4" mais en fait dans un sens ou dans un autre le problème reste le même.

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    octobre 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2019
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Problème résolu. Une variable était mal actualisée sur Jupyter Notebook.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/06/2014, 16h23
  2. Mauvaises dimensions avec getimagesize
    Par JeffPalmier dans le forum Langage
    Réponses: 1
    Dernier message: 04/09/2009, 16h31
  3. [Debutant][AWT] Dimension d'un objet List
    Par romu92 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 10/05/2006, 11h12
  4. "Tableau" à 2 dimensions (tuples, listes, dictionn
    Par Olivier_ dans le forum Général Python
    Réponses: 4
    Dernier message: 27/09/2005, 23h32

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