Jawaban sederhana: dalam python modern setiap tipe data adalah kelas, jadi secara formal tidak ada perbedaan antara dua solusi yang Anda usulkan. (Harap ingat untuk menggunakan kelas gaya baru: kelas klasik sudah usang! Lihat http://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes )
Sekarang pertanyaannya seharusnya: bagaimana cara mengatur struktur data yang efisien dalam python? Tidak ada keraguan bahwa gagasan untuk mengatur sel-sel sebagai serangkaian class Cell
contoh terlalu tidak efisien. Anda akan berakhir dengan kekacauan petunjuk dan data tidak darurat yang disusun seperti daftar tertaut yang rumit. Anda tentu saja memiliki kemampuan untuk dengan mudah memasukkan sel-sel baru dalam daftar Anda: tetapi apakah Anda memerlukan fitur ini? Sebaliknya Anda akan memiliki penyimpanan data yang tidak bersebelahan, dan Anda harus mengakses setiap sel dengan berbagai tingkat tipuan.
Jika Anda mengatur data Anda sebagai data numpy.ndarray
maka memori-berdekatan, dan mengakses sel yang berbeda cukup dilakukan melangkah melalui blok memori Anda: ruang efisien (tidak ada memori yang terbuang untuk pointer) dan cepat .
Seperti yang ditunjukkan oleh Ethan, konsep OO harus digunakan, tetapi pada tingkat yang lebih tinggi, setelah struktur data tingkat rendah yang efisien telah diimplementasikan, biasanya melalui numpy.ndarray
.
Pemrograman OO berarti mengikat data ke metode yang beroperasi pada data itu sendiri pada tingkat abstraksi yang lebih tinggi. (Contoh: Saya menerapkan kode FEM di mana matriks kekakuan didefinisikan sebagai kelas dengan metode untuk faktorisasi cholesky super-nodal yang jarang. Implementasi pertama adalah dalam-inti: ketika implementasi di luar-inti diperlukan, ini diperoleh melalui pewarisan dan penyesuaian minimal pada penyimpanan data yang digarisbawahi. Hampir 100% dari kode cholesky super-nodal digunakan kembali.)
Komentar terakhir, tetapi penting: prosedur numerik yang efisien adalah hasil dari pemetaan cerdas suatu algoritma dan struktur data ke arsitektur komputasi target Anda. Jika Anda mulai dengan struktur data yang salah, tidak ada cara untuk memulihkan efisiensi, tanpa penulisan ulang yang lengkap.