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

Calcul scientifique Python Discussion :

Demande de conseils sur un bout de code


Sujet :

Calcul scientifique Python

  1. #1
    Membre régulier
    Homme Profil pro
    Curieux
    Inscrit en
    Avril 2020
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 114
    Points : 85
    Points
    85
    Par défaut Demande de conseils sur un bout de code
    Bonjour,

    dans un petit exercice avec lequel je m'exerce, j'obtiens les résultats voulus. Je souhaiterais continuer mais je me dis qu'il serait sympa d'avoir un avis de personnes plus compétente que moi. Pourriez-vous me donner des conseils ou me remonter des erreurs (logique, code, syntaxe....)

    Bon déjà je pense qu'il serait bien de passer du code procédural à de l'objet.



    Merci
    Fichiers attachés Fichiers attachés
      0  0

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Si vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    i=0
    b = np.array(([0.0] * (plage*nbpalier)))
    for i in range (plage):
        b[i] = 0+(np.random.rand(1)*0.03)
    #Etage1 montant
    i=0
    for i in range (plage):
        b[1*plage+i] = 1+(np.random.rand(1)*ecar1-np.random.rand(1)*ecar2)   
    #Etage2 montant
    i=0
    for i in range (plage):
        b[2*plage+i] = 2+(np.random.rand(1)*ecar1-np.random.rand(1)*ecar2)      
    #Etage3 montant
    c'est que vous n'avez pas encore pigé les boucles imbriquées.

    En plus vous écrivez;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def clearall():
        all = [var for var in globals() if var[0] != "_"]
        for var in all:
            del globals()[var]
     
    clearall()
    pour corriger un problème qui ne devrait pas exister.

    Et comme à part cette fonction là, il n'y en a pas beaucoup d'autres dans votre code...
    Difficile de ne pas penser que vous débutez.

    Conseil: Ouvrez un tuto. apprenez les bases, faites les exercices (nombreux sont corrigés).

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

  3. #3
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Effectivement, on peut redire des choses.

    Notament ce pavé là

    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
    i=0
    b = np.array(([0.0] * (plage*nbpalier)))
    for i in range (plage):
        b[i] = 0+(np.random.rand(1)*0.03)
    #Etage1 montant
    i=0
    for i in range (plage):
        b[1*plage+i] = 1+(np.random.rand(1)*ecar1-np.random.rand(1)*ecar2)   
    #Etage2 montant
    i=0
    for i in range (plage):
        b[2*plage+i] = 2+(np.random.rand(1)*ecar1-np.random.rand(1)*ecar2)      
    #Etage3 montant
    i=0
    for i in range (plage):
        b[3*plage+i] = 3+(np.random.rand(1)*ecar1-np.random.rand(1)*ecar2)
    #Etage4 montant
    i=0
    for i in range (plage):
        b[4*plage+i] = 4+(np.random.rand(1)*ecar1-np.random.rand(1)*ecar2)
    #Etage3 descant
    i=0
    for i in range (plage):
        b[5*plage+i] = 3+(np.random.rand(1)*ecar1-np.random.rand(1)*ecar2)
    #Etage2 descant
    i=0
    for i in range (plage):
        b[6*plage+i] = 2+(np.random.rand(1)*ecar1-np.random.rand(1)*ecar2)
    #Etage1 descant
    i=0
    for i in range (plage):
        b[7*plage+i] = 1+(np.random.rand(1)*ecar1-np.random.rand(1)*ecar2)
    #Etage0 descant
    i=0
    for i in range (plage):
        b[8*plage+i] = 0+(np.random.rand(1)*ecar1-np.random.rand(1)*ecar2)
    Je pense que même vous meme il vous dérange ce pavé.
    Alors déjà pourquoi faire autant de boucle ? Vos boucles ont toutes la meme évolution de l'incrément i, et ne dépendent pas l'une de l'autre, alors pourquoi ne pas tous mettre dans une seul boucle ? Qqch comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i in range (plage):
        #code pour Etage0
        #code pour Etage1 montant
        #code pour Etage2 montant
        #code pour Etage3 montant
        #Etc
    Une fois que vous allez avoir fait ça, vous allez ensuite vous rendre compte que les codes pour vos différents Etages (mis à part pour l'Etage0), sont quand meme très ressemblant. Il y a juste le premier terme de la somme qui change. Donc en stockant ces termes dans une liste ou un tuple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    coeff = (1,2,3,4,3,2,1,0)
    on devrait aisément factoriser le code à l'intérieur de la boucle et on va avoir une structure comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i in range (plage):
        #code pour Etage0
        for k in range(1,8) :
            #code pour Etage k montant, en se servant de k et coeff[k]
    Ensuite :
    - quand vous faite une boucle for vous n'avez pas besoin d'initialiser la variable i ! Elle l'est automatiquement.
    for i in range(10) c'est pareil que for i in range(0, 10), qu iveut dire que votre i commence à 0, et s'arrete juste avant 10. D'ailleurs vous feriiez qqch comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    i=3
    for i in range(10):
        print(i)
    vous vous rendriiez bien compte que i ne commencerais pas à 3 ...
    - avec l'exemple ci-dessus, vous vous rendriiez aussi compte que i s'incrémente tout seul. Pas besoin de faire i = i +1 à la fin de la boucle, c'est fait automatiquement par le for. On a besoin de faire tout ca (initialisation et incrément) lorsqu'on utilise while seulement.


    Il y aurait ensuite encore bien d'autre choses à dire, mais déjà si vous corrigez tout ça on aura avancé.

    PS : Postez votre code entre balise CODE (c'est le bouton # quand vous rédiger votre message), pour nous c'est plus simple qu'un fichier à ouvrir
      0  0

  4. #4
    Membre régulier
    Homme Profil pro
    Curieux
    Inscrit en
    Avril 2020
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 114
    Points : 85
    Points
    85
    Par défaut
    déjà merci de vos réponses.

    Wiztricks, comment dire je ne prêtant pas avoir un niveau très élevé. Le code soumit montre surtout un commencement. Je suis sûr que vous pouvez être blasé des "Gros nullos qui ne savent pas coder qui osent poster", oui je pourrais retourner à des tutos, et oui j'y retourne. Mais je tente de mettre en place une idée que j'ai pour apprendre.

    Vos conseils que je prends sont faire plus de fonction, oui pour l'instant il n'y en a qu'une seule honte à moi... Oui j'ai commencé par faire ce qui était le plus abordable pour moi. Comme pour les boucles imbriquées, oui je pourrais faire directement de l'objet. Je fais avec mon niveau. Je viens demander des conseils par pour me faire rentrer dans le lard. Si ma demande n'a pas sa place ici ou si mon niveau est trop faible pour être poster merci de le dire simplement. Enfin merci des points soulignés.

    Ig_53,

    effectivement le pavé pour la génération est lourd, je vais commencer par là. Bien noté pour la balise CODE. Je corrige et reviens.

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    coeff = (0,1,2,3,4,3,2,1,0)
    b = np.array(([0.0] * (plage*nbpalier)))
    for i in range (plage):
        for k in range(nbpalier):
            b[k*plage+i] = coeff[k]+(np.random.rand(1)*ecar1-np.random.rand(1)*ecar2)
    Effectivement c'est vraimment plus simple, j'avais pas vue l'amélioration avec le coeff. J'ai nettoyé les boucles for de mes i=0 et i=i+1 suaf pour celle-ci, sinon il y a une erreur et ma derniére valeurs prend 0. à chaque étage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    z=0
    i=0
    p=0
    for z in range(nbpalier):
        for p in range(plage):
            if  palier[[z],[p]]==0.:
                #print('attention ',z,p,a[i])
                palier[[z],[p]]=a[i-1]
                #print(palier[[z],[i]])
            i=i+1
        p=i+1
    z=z+1
      0  0

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Aelurus_ Voir le message
    Wiztricks, comment dire je ne prêtant pas avoir un niveau très élevé. Le code soumit montre surtout un commencement. Je suis sûr que vous pouvez être blasé des "Gros nullos qui ne savent pas coder qui osent poster", oui je pourrais retourner à des tutos, et oui j'y retourne. Mais je tente de mettre en place une idée que j'ai pour apprendre.
    En vous inscrivant, vous avez reçu les règles que vous devez respecter avant de poster.
    Merci de les (re)lire.

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

Discussion fermée
Cette discussion est résolue.

Discussions similaires

  1. demande de conseil sur le modèle entité/association
    Par amandiiiiiine dans le forum Access
    Réponses: 3
    Dernier message: 02/01/2007, 00h34
  2. explication sur un bout de code
    Par poporiding dans le forum C++
    Réponses: 2
    Dernier message: 27/06/2006, 18h04
  3. demande de conseils sur l'utilisation d'index
    Par Ickou dans le forum Requêtes
    Réponses: 4
    Dernier message: 29/03/2006, 12h13
  4. [SGBD] demande de conseil sur script util (FPDF et mysql_insert_id)
    Par mangafan dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 12/10/2005, 00h57
  5. Besoin d'explications sur un bout de code
    Par zizitop dans le forum C
    Réponses: 7
    Dernier message: 26/04/2005, 14h51

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