|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Nouveau Membre du Club
![]() Inscription : octobre 2005 Messages : 57 ![]() |
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 :
Code :
|
||||
|
|
00
|
|
|
#2 | |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 697 ![]() |
Salut,
Citation:
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 |
|
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : octobre 2005 Messages : 57 ![]() |
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 ? |
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 697 ![]() |
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 |
|
|
00
|
|
|
#5 |
![]() ![]() Matthieu BrucherDéveloppeur HPC Inscription : juillet 2005 Messages : 9 697 ![]() |
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". |
|
|
10
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : octobre 2005 Messages : 57 ![]() |
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. |
|
|
00
|
|
|
#7 | |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 697 ![]() |
Salut,
Citation:
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 |
|
|
|
00
|
|
|
#8 |
|
Nouveau Membre du Club
![]() Inscription : octobre 2005 Messages : 57 ![]() |
Je crois que tu es en train de parler de comment rendre interactive l'exploration de ces lieux.
Ma question est plutôt comment
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 ? |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com