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 :

probleme trop bizarre avec les arrays de numpy


Sujet :

Python

Vue hybride

membreComplexe12 probleme trop bizarre avec... 16/12/2014, 17h23
wiztricks Salut, Pourquoi écrire: ... 16/12/2014, 18h00
membreComplexe12 merci beaucoup de ta réponse... 16/12/2014, 18h31
wiztricks class A: pass class B(A):... 16/12/2014, 18h50
marco056 Pour expliquer de façon... 16/12/2014, 18h32
membreComplexe12 merci pour votre aide j'ai... 16/12/2014, 18h51
wiztricks Salut, C'est que cela ne... 16/12/2014, 19h04
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut probleme trop bizarre avec les arrays de numpy
    Bonjour tous,
    j'ai un problème que je trouve très bizarre, j'espère que vous pourrez m'expliquer qu'es ce qui ne va pas dans mon code car là je ne comprends plus du tout

    Ci dessous vous allez voir dans ma fonction que j'ai un array qui s'appelle "Loadings", il est initialisé au début de la simulation et ensuite je n'y touche plus (je m'en sers juste comme entrée pour faire des petits calculs)

    A mon grand étonnement lorsque je vais la vérification de son contenu (où je met le commentaire #verif1 en réalité il y a une fonction qui vérifie le contenu de Loading) je me rend compte qu 'il est modifié dans cette fonction

    Et le truc que comprends encore moins c'est que si j'efface la ligne AllResultsHere[f][tp1][:]=np.copy(CurrentResultTp1) alors la matrice "Loadings" reste intacte comme je le souhaite

    J'ai entendu dire qu'avec numpy on ne peux pas faire A=B (je ne sais pas pourquoi ) et qu'il faut faire A=np.copy(B) et c'est bien ce que j'ai fais donc je suis vraiment étonné d'avoir des soucis....

    merci pour l'aide que vous pourrez me donner

    bonne soirée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
        def allsimulations(self,Param,systemO,inputO,plotO,finalPlot):
            Loadings=np.asarray(inputO.allExpLoadMatrix)
            Results=np.asarray(inputO.allExpRsltMatrix)
            LoadingsOpt=np.asarray(inputO.allOptloadMatrix)
            ResultsOpt=np.asarray(inputO.allOptResultMatrix)
            AllResultsHere=np.asarray(inputO.allExpLoadMatrix)#np.copy(Loadings)
            Times=np.asarray(inputO.allTimeVector)
            ResultsIni=np.asarray(inputO.allInitialResults)
            ### 
            ### 
            #verif1
            ### 
            ### 
            tempCol=[]
            for i in range(0,len(inputO.iniAuxVariables),1):
                tempCol.append(inputO.iniAuxVariables[i])
            ListOfAux=[]
            for i in range(0,len(Loadings),1):
                tempLine=[]
                for j in range(0,len(Loadings[i]),1):
                    tempLine.append(tempCol)
                ListOfAux.append(tempLine)
            AuxVar=np.asarray(ListOfAux)
            ### 
            ### 
            #verif2
            ### 
            ### 
            for f in range(0,len(Loadings),1):
                for tp1 in range(0,len(Times[f]),1):
                    if tp1==0:
                        CurrentResultTp1=np.copy(ResultsIni[f][0][:])
                        CurrentAuxVarTp1=np.copy(AuxVar[f][0][:])
                    else:
                        timeT=Times[f][tp1-1]
                        timeTp1=Times[f][tp1]
                        dTime=timeTp1-Times[f][tp1-1]
                        LoadT=np.copy(Loadings[f][tp1-1][:])
                        LoadTp1=np.copy(Loadings[f][tp1][:])
                        DLoad=np.copy(LoadTp1-Loadings[f][tp1-1][:])
                        DLoadDt=DLoad/dTime
                        ResultT=np.copy(CurrentResultTp1)
                        ResultTp1=np.copy(CurrentResultTp1)
                        AuxVarT=np.copy(CurrentAuxVarTp1)
                        AuxVarTp1=np.copy(CurrentAuxVarTp1)
                        sizeR=len(CurrentResultTp1)
                        sizeA=len(CurrentAuxVarTp1)
                        CurrentResultTp1=runC.simulation(self,Param,sizeR,sizeA,timeT,timeTp1,dTime,LoadT,LoadTp1,DLoad,DLoadDt,ResultT,ResultTp1,AuxVarT,AuxVarTp1)
                    ### 
                    ### 
                    #verif3
                    ### 
                    ### 
                    AllResultsHere[f][tp1][:]=np.copy(CurrentResultTp1)
                    ### 
                    ### 
                    #verif4
                    ### 
                    ### 
            ##############
            return AllResultsHere

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Salut,

    Pourquoi écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Loadings=np.asarray(inputO.allExpLoadMatrix)
    alors que vous dites:
    J'ai entendu dire qu'avec numpy on ne peux pas faire A=B (je ne sais pas pourquoi ) et qu'il faut faire A=np.copy(B) et c'est bien ce que j'ai fais donc je suis vraiment étonné d'avoir des soucis....
    La documentation de numpy.asarray donne des exemples qui devraient vous alerter.

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

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    merci beaucoup de ta réponse mais désolé je n'ai pas compris.

    J'ai une liste qui se trouve dans une classe input et je veux copier le contenu dans une nouvelle variable "Loading" en faisant une conversion de "list" (biblio de base) vers "array" (numpy)

    --> pour ceci np.asarray(a) est donc pas nécessaire ?
    --> il faut donc faire np.copy(np.asarray(a)) ?

    mais je ne comprends pas trop pourquoi on est obligé de faire ceci ?

    c'est surement lié à cette phrase " If a is a subclass of ndarray, a base class ndarray is returned." mais je ne l'a comprends pas trop... pourrais tu l'éclaircir stp pour un débutant comme moi ?

    au fait c'est quoi un "ndarray" ce n'est pas comme un "array" ?

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Citation Envoyé par membreComplexe12 Voir le message
    c'est surement lié à cette phrase "f a is a subclass of ndarray, a base class ndarray is returned." mais je ne l'a comprends pas trop...
    pourrais tu l'éclaircir stp pour un débutant comme moi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class A: pass
    class B(A): pass
    B est une sous classe de A.
    La phrase dit que si on passe un B en argument, il retournera un A.
    C'est de la gymnastique POO de base.

    Mais le plus important est dans la phrase précédente: No copy is performed if the input is already an ndarray.
    De plus, regardez les exemples, ils sont assez "parlants".

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

  5. #5
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Pour expliquer de façon simplifiée (d'après ce que j'ai compris), A= B font que A et B sont à la même adresse dans l'ordinateur. Modifier l'un affecte l'autre.
    Pour avoir 2 adressages différents, il faut faire une copie.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    merci pour votre aide

    j'ai donc remplacé toutes les commandes :
    par des :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A=np.copy(np.asarray(B))
    et le problème persiste....

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Salut,

    C'est que cela ne corrige qu'une partie du problème ou que la cause du problème est autre.
    Sans fournir un exemple de code qui permette de reproduire votre problème, pas facile de savoir.

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

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    merci mais à mon avis le problème vient bien de ce bout de code car :

    - la variable Loading n'est défini et utilisée que dans cette fonction nulle part ailleur donc à priori il n'y a que les lignes que l'on voit ci dessus qui peuvent avoir un impact sur Loading ? comment une fonction n'ayant rien avoir avec celle là pourrait modifier le contenu d'une variable locale de cette fonction ?

    - si je met cette ligne en commentaire "AllResultsHere[f][tp1][:]=np.copy(CurrentResultTp1)" mon problème est résolu

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    merci beaucoup de prendre le temps de m'aider.

    Citation Envoyé par wiztricks Voir le message
    Sans fournir un exemple de code qui permette de reproduire votre problème, pas facile de savoir.
    Suite à cette remarque j'ai réduis mon programme afin d'avoir le cas le plus simple possible qui puisse te permettre de reproduire ce que j'observe.

    En pièce jointe de ce message j'ai mis mes trois fichiers pythons, dans le prochain message je mettrais les fichiers d'entrées.

    Si tu lances ce bout de code tu vas d'apercevoir que ma matrice "Loading" est plein de 0 alors que je ne l'a rempli pas de 0....
    par contre si je commente la ligne dont je t'ai parlé tout à l'heure (dans le fichier runClass.py) alors ma matrice "Loading" garde bien un contenu correct...

    si tu peux jeter un coup d'oeil à mon code et me dire d'où est le problème ça serait super, j'ai essayé de nombres choses et là je ne comprends plus rien

    merci beaucoup

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

Discussions similaires

  1. Probleme de auto_ptr avec les map
    Par Luther dans le forum C++
    Réponses: 8
    Dernier message: 08/04/2005, 10h49
  2. problème avec les array en pl/pgsql
    Par nico31120 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 04/03/2005, 16h04
  3. Problème de taille avec les tables
    Par Angelico dans le forum Paradox
    Réponses: 2
    Dernier message: 27/12/2004, 18h38
  4. [Layer] Probleme de superposition avec les JMenuItem
    Par azdruyel dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 21/07/2004, 11h24
  5. problemes de performances avec les requetes select
    Par berry dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/07/2003, 13h39

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