Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Nouveau Membre du Club
    Inscrit en
    octobre 2005
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : octobre 2005
    Messages : 57
    Points : 39
    Points
    39

    Par défaut Mélanger OO et calcul scientifique avec numpy ?

    Bonjour,

    Comment faire pour bien mélanger OO et calcul scientifique avec Python et numpy ? Et déjà est-ce une bonne idée en général ?

    Le use case est le suivant : supposons qu'un modèle physique est développé sous forme objet, à tout hasard la trajectoire d'un projectile. Donc, ce qui m'intéresse en général est de dessiner cette trajectoire étant donné un angle alpha de lancement et la donnée d'une vitesse initiale, exemple

    Code :
    1
    2
    3
    4
     
    alpha = math.pi/6
    v0 = 1
    path = Stone(alpha, v0).trajectory() # vecteur de coordonnées x,y
    Maintenant, pour mieux comprendre le comportement de ce projectile, supposons que nous voulions faire une étude de la distance maximale parcourue en fonction de alpha, et v0.

    Code :
    1
    2
    3
    4
     
    alpha = linspace(0, pi/2, 7)
    v0 = lin(0, 10, 0.1)
    dmax= Stone(alpha, v0).maxRange() # ou quelle est la meilleure approche ??
    Quelle est la meilleure manière de procéder ici ou doit-on se résoudre à abandonner l'orienté objet si on veut pouvoir faire des analyses sur tous les paramètres d'un modèle et toujours bénéficier de la performance de numpy ?

  2. #2
    Modérateur

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

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 309
    Points : 7 399
    Points
    7 399

    Par défaut

    Salut,
    doit-on se résoudre à abandonner l'orienté objet si on veut pouvoir faire des analyses sur tous les paramètres d'un modèle et toujours bénéficier de la performance de numpy ?
    L'intérêt d'un objet (ou d'une closure en général) est d'avoir un comportement variable en fonction d'un état interne.

    Comme, le calcul de trajectoire parabolique se fait via des fonctions simples: pas besoin d'état, juste de valeurs d'entrées pour produire des valeurs en sortie.

    L'intérêt de la programmation objet, se limitera, dans ce cas, à l'organisation du code (regrouper/factoriser des fonctions), mais on devrait pouvoir s'en passer.

    Pourquoi pensiez-vous l'OOP indispensable pour ce genre de programme?

    - W
    Architectures Post-Modernes

  3. #3
    Nouveau Membre du Club
    Inscrit en
    octobre 2005
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : octobre 2005
    Messages : 57
    Points : 39
    Points
    39

    Par défaut

    Bonjour et merci de prendre le temps de te pencher sur ce problème existentiel.

    L'exemple est simple pour ne pas nous noyer dans les détails particuliers d'un modèle.

    En fait, je comprends bien que l'idée d'un objet est d'encapsuler un état interne en un tout cohérent. Justement, ici, mon idée est d'encapsuler tous les paramètres d'un modèle dans un seul objet puisqu' a priori les objets servent à cela.

    Mon problème est que parfois, on peut vouloir une étude de sensibilité à la variation de certains paramètres et une possibilité par exemple est de voir une surface indexée par les paramètres pris 2 à 2.

    Donc est-ce qu'à chaque fois, je dois re-écrire une fonction toute bête pour chaque paire de paramètres dont je veux étudier l'influence (typiquement, je veux passer deux numpy arrays à la fonction et plotter la surface par exemple) ? Ou y-a-t-il manière de réutiliser efficacement l'objet que je me suis échiné à construire ?

  4. #4
    Modérateur

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

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 309
    Points : 7 399
    Points
    7 399

    Par défaut

    Salut,

    Il y a certainement possibilité de réutiliser mais sans plus d'infos sur votre code, difficile d'aller dans le quoi, comment.

    Python est un langage intéressant pour débroussailler des sujets inconnus.

    Au départ, on ne connaît pas encore suffisamment le domaine pour qu'objets et classes soient assez "stables": quelques abstractions s'imposent mais dès qu'on entre dans les détails, pas mal de questions restent.

    Python est assez souple pour qu'on puisse avancer et balayer le sujet sans avoir à tout remettre d'équerre. L'important, c'est d'avoir à la fin un truc qui réalise les différents cas d'utilisation significatifs. Ca marchotte mais n'est pas montrable car çà tient avec des bouts de ficelle.

    A partir de là, on peut essayer de sortir objets/modules/classes et réorganiser le code. Avant, cela risque d'être une perte de temps.

    - W
    Architectures Post-Modernes

  5. #5
    Rédacteur/Modérateur

    Avatar de Matthieu Brucher
    Profil pro Matthieu Brucher
    Développeur HPC
    Inscrit en
    juillet 2005
    Messages
    9 803
    Détails du profil
    Informations personnelles :
    Nom : Matthieu Brucher
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : juillet 2005
    Messages : 9 803
    Points : 20 121
    Points
    20 121

    Par défaut

    Tu peux faire des objets, mais tu t'y prends sans doute de la mauvaise manière. D'ailleurs que ce soit Python ou autre, le problème est le même. Faire de l'OO sur du code scientifique sans réfléchir est une catastrophe au niveau perf.
    Dans ce cas, on commence par analyser les endroits où la vectorisation ou la parallélisation peuvent intervenir et on crée des objets qui seront capables d'encapsuler ces endroits. Les objets seront différents, mais bien plus efficaces et tout aussi clairs que des objets "classiques".

  6. #6
    Nouveau Membre du Club
    Inscrit en
    octobre 2005
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : octobre 2005
    Messages : 57
    Points : 39
    Points
    39

    Par défaut

    Disons que les paramètres d'un modèle se prêtent bien conceptuellement à une encapsulation au niveau objet.

    Ainsi par exemple, voir le code de ce tuto qui utilise poly1d pour plotter diverses polynômes de degré 2 avec les coefficients c0 c1 c2.

    Supposons que je veuille voir le lieu où toutes les tangentes soient nulles en fonction de c1, c2, comment faire en gardant l'utilisation des objets poly1d ?

    Bien sûr, je pourrais toujours écrire en procédural une fonction qui prendrait deux vecteurs cc1 et cc2 et qui donnerait le résultat et qu'il suffirait de plotter la surface résultante après mais ce serait pratiquement réinventer la roue à chaque fois.

  7. #7
    Modérateur

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

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 309
    Points : 7 399
    Points
    7 399

    Par défaut

    Salut,

    Citation Envoyé par mailaka Voir le message
    Supposons que je veuille voir le lieu où toutes les tangentes soient nulles en fonction de c1, c2, comment faire en gardant l'utilisation des objets poly1d ?
    Dans ce cas, le framework ETS réduit les options de construction: il faut d'abord apprendre à l'utiliser pour arriver à vos fins!
    [LIST][*]trouver comment ajouter cette information au graphique existant, i.e. voir la documentation et les exemples de chaco.[*]récupérer les informations dans PlotterApplication pour le calcul et éventuellement le modifier côté affichage[/LIST
    En gros, vous allez avoir à trouver la dizaine de ligne de codes qui va bien pour ajouter cette fonctionnalité à un existant qui est un singleton de 30 lignes.
    Peu importe comment vous aller les coder, le plus long sera de trouver le contenu de ces lignes. Réorganiser ces 40 lignes de code plus tard ne devrait pas poser de problèmes.
    - W
    Architectures Post-Modernes

  8. #8
    Nouveau Membre du Club
    Inscrit en
    octobre 2005
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : octobre 2005
    Messages : 57
    Points : 39
    Points
    39

    Par défaut

    Je crois que tu es en train de parler de comment rendre interactive l'exploration de ces lieux.

    Ma question est plutôt comment
    1. soit dessiner directement la surface correspondant à la sensibilité à deux paramètres ;
    2. soit faire en sorte que l'exploration interactive de la sensibilité aux divers paramètres reste performante (ie toute la surface correspondant à deux paramètres du modèle bougerait en fonction d'autres bougés à la main).


    Par exemple pour le point 2, du style pouvoir initialiser direct avec les vecteurs voulus les paramètres de coefficients sur une classe héritée de poly1d. Enfin, est-ce possible et souhaitable ?

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •