Простой ответ: в современном Python каждый тип данных является классом, поэтому формально нет никакой разницы между двумя предложенными вами решениями. (Пожалуйста, не забудьте использовать классы нового стиля: классические классы устарели! См. Http://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes )
Теперь вопрос должен быть: как организовать эффективную структуру данных в Python? Нет сомнений в том, что сама идея организации ячеек в виде множества class Cell
экземпляров слишком неэффективна. Вы получите путаницу указателей и неконкурентных данных, организованных как сложный связанный список. Конечно, у вас есть возможность легко добавлять новые ячейки в ваш список: но нужна ли вам эта функция? Напротив, у вас будет несмежное хранилище данных, и вы должны получить доступ к каждой ячейке с разными уровнями косвенности.
Если вы организуете свои данные как данные, numpy.ndarray
то данные будут непрерывными по памяти, и доступ к различным ячейкам будет просто проходить через ваш блок памяти: экономия пространства (нет памяти, потраченной на указатели) и быстрая .
Как отметил Итан, концепции ОО следует использовать, но на более высоком уровне, после того как эффективная структура данных низкого уровня будет реализована, обычно через numpy.ndarray
s.
ОО-программирование означает привязку данных к методам, которые работают с самими данными на более высоком уровне абстракции. (Пример: я реализовал код FEM, в котором матрица жесткости была определена как класс с методом разреженной суперузловой факторизации Холецкого. Первая реализация была внутренней: когда требовалась внешняя реализация, это был получен с помощью наследования и минимальных изменений в хранилище подчеркивающих данных. Почти 100% супер-узлового кода cholesky было использовано повторно.)
Последний комментарий, но важный: эффективная числовая процедура является результатом умного сопоставления алгоритма и структуры данных с вашей целевой вычислительной архитектурой. Если вы начнете с неправильной структуры данных, невозможно восстановить эффективность без полного переписывания.