Basit cevap: Modern python'da her veri türü bir sınıftır, bu nedenle resmi olarak önerdiğiniz iki çözüm arasında bir fark yoktur. (Lütfen yeni stil sınıfları kullanmayı unutmayın: klasik sınıflar kullanılmıyor! Bkz. Http://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes )
Şimdi soru şu olmalıdır: Python'da verimli bir veri yapısını nasıl düzenleyebilirim? Kuşkusuz, hücreleri bir dizi class Cell
örnek olarak organize etme fikri çok verimsizdir. Karmaşık bir bağlantılı liste gibi düzenlenmiş işaretçiler ve bitişik olmayan verilerle sonuçlanacaksınız. Elbette listenize kolayca yeni hücreler ekleme olanağınız var: ama bu özelliğe ihtiyacınız var mı? Aksine bitişik olmayan veri depolamanız olacaktır ve her hücreye farklı dolaylı düzeylerde erişmeniz gerekir.
Verilerinizi bu şekilde düzenlerseniz, veriler numpy.ndarray
bellek bitişiktir ve farklı hücrelere erişim basitçe bellek bloğunuz üzerinden geçilir: alandan tasarruf sağlar (işaretçiler için bellek kaybı olmaz) ve hızlıdır .
Ethan'ın işaret ettiği gibi, OO kavramları kullanılmalıdır, ancak daha yüksek seviyede, genellikle düşük verimli bir veri yapısı uygulandığında numpy.ndarray
.
OO programlama, verilerin kendisinde daha yüksek soyutlama düzeyinde çalışan yöntemlere bağlanması anlamına gelir. (Bir örnek: Sertlik matrisinin seyrek süper nodal koleski çarpanlarına ayırma yöntemi olan bir sınıf olarak tanımlandığı bir FEM kodu uyguladım. İlk uygulama çekirdekti: çekirdek dışı bir uygulamaya ihtiyaç duyulduğunda, bu kalıtım ve alt çizgi veri depolamasında minimum ayarlamalarla elde edilmiştir . Süper düğümlü kolesky kodunun neredeyse% 100'ü tekrar kullanılmıştır.)
Son bir yorum, ama çok önemli: verimli bir sayısal prosedür, bir algoritmanın ve bir veri yapısının hedef hesaplama mimarinize akıllı bir şekilde eşlenmesinin sonucudur. Yanlış veri yapısıyla başlarsanız , tam bir yeniden yazma olmadan verimliliği kurtarmanın bir yolu yoktur .