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 :

Mélanger OO et calcul scientifique avec numpy ?


Sujet :

Calcul scientifique Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 57
    Points : 53
    Points
    53
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    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.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 57
    Points : 53
    Points
    53
    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
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    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.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Rédacteur

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

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    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
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 57
    Points : 53
    Points
    53
    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
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    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.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 57
    Points : 53
    Points
    53
    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 ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/03/2015, 17h57
  2. calculs mathématiques avec des "racines)
    Par emmanuel4945 dans le forum Access
    Réponses: 1
    Dernier message: 30/01/2006, 21h40
  3. [Calcul] difficulté avec BigDecimal
    Par dinver dans le forum Langage
    Réponses: 4
    Dernier message: 01/01/2006, 16h41
  4. Réponses: 2
    Dernier message: 28/09/2005, 17h08
  5. [calcul] pb avec la syntaxe d'une expression calulée
    Par gloogloo dans le forum PostgreSQL
    Réponses: 11
    Dernier message: 29/06/2005, 17h14

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