간단한 대답 : 현대 파이썬에서는 모든 데이터 유형이 클래스이므로 공식적으로 제안한 두 솔루션 사이에 차이가 없습니다. (새로운 스타일의 클래스를 사용해야합니다 : 클래식 클래스는 더 이상 사용되지 않습니다! http://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes 참조 )
이제 문제는 파이썬에서 효율적인 데이터 구조를 어떻게 구성합니까? 셀을 class Cell
인스턴스 배열로 구성한다는 아이디어 가 너무 비효율적 이라는 것은 의심의 여지가 없습니다 . 복잡한 연결 목록처럼 구성된 포인터와 비 연속 데이터가 엉망이됩니다. 물론 목록에 새 셀을 쉽게 삽입 할 수 있지만이 기능이 필요합니까? 반대로 비 연속적인 데이터 저장 공간이 있으며 다른 수준의 간접적으로 모든 셀에 액세스해야합니다.
당신은 귀하의 데이터를 구성하는 경우 numpy.ndarray
다음 데이터가 메모리의 연속이며, 다른 세포에 접근하는 것은 단순히 완료를 메모리 블록을 통해 스트 라이딩입니다 : 공간 효율 (포인터에 대한 낭비없이 메모리)와 빨리 .
Ethan이 지적한 바와 같이, 효율적인 저수준 데이터 구조가 구현되면 일반적으로 OO 개념을 사용해야하지만 상위 수준에서는 OO 개념이 사용됩니다 numpy.ndarray
.
OO 프로그래밍은 데이터 자체에서 더 높은 수준의 추상화로 작동하는 메소드에 데이터를 바인딩하는 것을 의미합니다. (예 : 강성 매트릭스가 희박한 초 노달 콜레 스키 분해를위한 방법으로 클래스로 정의 된 FEM 코드를 구현했습니다. 첫 번째 구현은 코어 내부입니다. 코어 외부 구현이 필요할 때 상속 및 기본 데이터 스토리지에 대한 최소한의 조정을 통해 획득했습니다 . 슈퍼 노드 콜레 스키 코드의 거의 100 %가 재사용되었습니다.)
마지막 주석이지만 중요합니다. 효율적인 수치 절차는 알고리즘과 데이터 구조를 대상 컴퓨팅 아키텍처에 스마트하게 매핑 한 결과입니다. 잘못된 데이터 구조로 시작 하면 완전히 다시 쓰지 않고 효율성을 복구 할 수있는 방법 이 없습니다 .