Einfache Antwort: In modernem Python ist jeder Datentyp eine Klasse, sodass formal kein Unterschied zwischen den beiden von Ihnen vorgeschlagenen Lösungen besteht. (Bitte denken Sie daran, Klassen neuen Stils zu verwenden: Klassische Klassen sind veraltet! Siehe http://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes )
Nun sollte die Frage lauten: Wie organisiere ich eine effiziente Datenstruktur in Python? Es besteht kein Zweifel, dass die Idee, die Zellen als Array von class Cell
Instanzen zu organisieren, viel zu ineffizient ist. Sie werden mit einem Durcheinander von Zeigern und nicht zusammenhängenden Daten enden, die wie eine komplizierte verknüpfte Liste organisiert sind. Sie haben natürlich die Möglichkeit, einfach neue Zellen in Ihre Liste einzufügen. Benötigen Sie diese Funktion? Im Gegenteil, Sie haben einen nicht zusammenhängenden Datenspeicher und müssen über verschiedene Indirektionsebenen auf jede Zelle zugreifen.
Wenn Sie Ihre Daten als organisieren, sind die Daten numpy.ndarray
speicherzusammenhängend, und der Zugriff auf verschiedene Zellen erfolgt einfach über Ihren Speicherblock: platzsparend (kein Speicher für Zeiger verschwendet) und schnell .
Wie von Ethan hervorgehoben, sollten OO-Konzepte verwendet werden, jedoch auf höherer Ebene, sobald eine effiziente Datenstruktur auf niedriger Ebene implementiert wurde, normalerweise durch numpy.ndarray
's.
OO-Programmierung bedeutet, Daten an die Methoden zu binden, die auf einer höheren Abstraktionsebene mit den Daten selbst arbeiten. (Ein Beispiel: Ich habe einen FEM-Code implementiert, in dem die Steifheitsmatrix als Klasse mit einer Methode zur spärlichen Superknoten-Cholesky-Faktorisierung definiert wurde. Die erste Implementierung war im Kern: Wenn eine Implementierung außerhalb des Kerns erforderlich war, war dies erforderlich wurde durch Vererbung und minimale Anpassungen an der unterstrichenen Datenspeicherung erhalten. Fast 100% des Superknoten-Cholesky-Codes wurden wiederverwendet.)
Ein letzter, aber entscheidender Kommentar: Ein effizientes numerisches Verfahren ist das Ergebnis einer intelligenten Zuordnung eines Algorithmus und einer Datenstruktur zu Ihrer Zielcomputerarchitektur. Wenn Sie mit der falschen Datenstruktur beginnen, gibt es keine Möglichkeit , die Effizienz wiederherzustellen, ohne sie vollständig neu zu schreiben.