Проста відповідь: у сучасному python кожен тип даних є класом, тому формально немає різниці між двома запропонованими вами рішеннями. (Будь ласка, не забудьте використовувати класи нового стилю: класичні класи застаріли! Див. Http://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes )
Тепер слід запитати: як я можу організувати ефективну структуру даних у python? Немає сумнівів, що сама ідея організації комірок як масиву class Cell
екземплярів є занадто неефективною. У вас з’явиться безлад вказівників та непостійних даних, організованих як складний зв’язаний список. Звичайно, ви маєте можливість легко вставляти нові клітинки у свій список: але чи потрібна вам ця функція? Навпаки, у вас буде безперервне зберігання даних, і вам доведеться отримувати доступ до кожної комірки різними рівнями непрямості.
Якщо ви впорядковуєте свої дані як numpy.ndarray
тоді, дані зберігаються в пам'яті безперервно, а доступ до різних комірок здійснюється просто крокуючи через ваш блок пам'яті: обсяг простору (не витрачається пам'ять на покажчики) та швидкий .
Як вказував Етан, слід використовувати концепції OO, але на більш високому рівні, як тільки буде впроваджена ефективна структура даних низького рівня, як правило, через numpy.ndarray
"s".
Програмування ОО означає прив'язку даних до методів, які працюють над самими даними на більш високому рівні абстракції. (Приклад: я реалізував FEM-код, у якому матриця жорсткості була визначена як клас із методом розрідженої надвузлової факторизації холески. Перша реалізація була по суті: коли потрібна була позаязова реалізація, це було отримано шляхом успадкування та мінімальних коригувань підкреслюваного сховища даних. Майже 100% надвузлового холеського коду було повторно використане.)
Останній коментар, але важливий: ефективна числова процедура є результатом розумного відображення алгоритму та структури даних до вашої цільової архітектури обчислень. Якщо ви почнете з неправильної структури даних , без повного перезапису неможливо відновити ефективність.