Réponse simple: en python moderne, chaque type de données est une classe, donc formellement il n'y a pas de différence entre les deux solutions que vous proposez. (N'oubliez pas d'utiliser des classes de nouveau style: les classes classiques sont obsolètes! Voir http://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes )
Maintenant, la question devrait être: comment organiser une structure de données efficace en python? Il ne fait aucun doute que l'idée même d'organiser les cellules en un tableau d' class Cell
instances est bien trop inefficace. Vous vous retrouverez avec un désordre de pointeurs et de données non contigus organisés comme une liste chaînée compliquée. Vous avez bien sûr la possibilité d'insérer facilement de nouvelles cellules dans votre liste: mais avez-vous besoin de cette fonctionnalité? Au contraire, vous aurez un stockage de données non contigu, et vous devrez accéder à chaque cellule par différents niveaux d'indirection.
Si vous organisez vos données sous forme de numpy.ndarray
données, alors les données sont contiguës à la mémoire, et l'accès à différentes cellules se fait simplement en parcourant votre bloc de mémoire: peu encombrant (pas de mémoire gaspillée pour les pointeurs) et rapide .
Comme l'a souligné Ethan, les concepts d'OO doivent être utilisés, mais à un niveau supérieur, une fois qu'une structure de données efficace de bas niveau a été mise en œuvre, généralement via numpy.ndarray
le s.
La programmation OO signifie la liaison des données aux méthodes qui opèrent sur les données elles-mêmes à un niveau d'abstraction plus élevé. (Un exemple: j'ai implémenté un code FEM dans lequel la matrice de rigidité a été définie comme une classe avec une méthode de factorisation cholesky super-nodale clairsemée. La première implémentation était in-core: lorsqu'une implémentation out-of-core était nécessaire, cette a été obtenu via l'héritage et des ajustements minimes au stockage des données soulignées. Près de 100% du code cholesky super-nodal a été réutilisé.)
Un dernier commentaire, mais crucial: une procédure numérique efficace est le résultat d'une cartographie intelligente d'un algorithme et d'une structure de données à votre architecture informatique cible. Si vous commencez avec la mauvaise structure de données, il n'y a aucun moyen de récupérer l'efficacité, sans une réécriture complète.