Prosta odpowiedź: we współczesnym pythonie każdy typ danych jest klasą, więc formalnie nie ma różnicy między dwoma zaproponowanymi przez Ciebie rozwiązaniami. (Pamiętaj, aby używać klas w nowym stylu: klasyczne klasy są przestarzałe! Zobacz http://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes )
Teraz pytanie powinno brzmieć: jak zorganizować wydajną strukturę danych w Pythonie? Nie ma wątpliwości, że sam pomysł organizowania komórek jako szeregu class Cell
instancji jest zdecydowanie zbyt nieefektywny. Skończysz na bałaganie wskaźników i nieinwazyjnych danych zorganizowanych jak skomplikowana połączona lista. Oczywiście masz możliwość łatwego wstawiania nowych komórek na liście: ale czy potrzebujesz tej funkcji? Przeciwnie, będziesz mieć nieciągłe przechowywanie danych i będziesz musiał uzyskać dostęp do każdej komórki za pomocą różnych poziomów pośrednictwa.
Jeśli uporządkujesz swoje dane jako dane, numpy.ndarray
wówczas dane będą przylegały do pamięci, a dostęp do różnych komórek będzie po prostu przebiegał przez blok pamięci: oszczędność miejsca (brak marnowania pamięci na wskaźniki) i szybki .
Jak zauważył Ethan, należy stosować koncepcje OO, ale na wyższym poziomie, po wdrożeniu wydajnej struktury danych niskiego poziomu, zwykle poprzez numpy.ndarray
.
Programowanie OO oznacza wiązanie danych z metodami, które działają na samych danych na wyższym poziomie abstrakcji. (Przykład: zaimplementowałem kod MES, w którym macierz sztywności została zdefiniowana jako klasa z metodą rzadkiego supernodalnego cholesowatego rozkładania na czynniki pierwsze. Pierwsza implementacja była w rdzeniu: gdy potrzebna była implementacja poza rdzeniem, to uzyskano poprzez dziedziczenie i minimalne korekty podkreślającego przechowywania danych. Ponownie wykorzystano prawie 100% supernodalnego kodu cholesky.)
Ostatni komentarz, ale kluczowy: wydajna procedura numeryczna jest wynikiem inteligentnego mapowania algorytmu i struktury danych na docelową architekturę obliczeniową. Jeśli zaczniesz od niewłaściwej struktury danych, nie będzie możliwości odzyskania wydajności bez pełnego przepisania.