คำตอบง่ายๆ: ใน python สมัยใหม่ทุกชนิดของข้อมูลเป็นคลาสดังนั้นจึงไม่มีความแตกต่างระหว่างสองวิธีที่คุณเสนอ (โปรดจำไว้ว่าให้ใช้คลาสสไตล์ใหม่: คลาสคลาสสิกล้าสมัย! ดูhttp://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes )
ตอนนี้คำถามควรเป็น: ฉันจะจัดโครงสร้างข้อมูลที่มีประสิทธิภาพในหลามได้อย่างไร ไม่ต้องสงสัยเลยว่าความคิดของการจัดระเบียบเซลล์เป็นอาร์เรย์ของclass Cell
อินสแตนซ์นั้นไม่มีประสิทธิภาพมากเกินไป คุณจะจบลงด้วยความยุ่งเหยิงของพอยน์เตอร์และข้อมูลที่ไม่ติดกันซึ่งถูกจัดระเบียบเหมือนรายการเชื่อมโยงที่ซับซ้อน คุณมีความสามารถในการแทรกเซลล์ใหม่ในรายการได้อย่างง่ายดาย แต่คุณต้องการคุณสมบัตินี้หรือไม่? ในทางตรงกันข้ามคุณจะมีการจัดเก็บข้อมูลที่ไม่ต่อเนื่องกันและคุณต้องเข้าถึงทุกเซลล์โดยการอ้อมในระดับที่แตกต่างกัน
หากคุณจัดระเบียบข้อมูลของคุณเป็นnumpy.ndarray
ข้อมูลแล้วเป็นหน่วยความจำที่ต่อเนื่องกันและการเข้าถึงเซลล์แตกต่างกันคือ striding ทำเพียงแค่ผ่านบล็อกหน่วยความจำของคุณ: พื้นที่อย่างมีประสิทธิภาพ (หน่วยความจำไม่มีการสูญเสียสำหรับตัวชี้) และรวดเร็ว
ตามที่อธิบายโดย Ethan แนวคิด OO ควรใช้ แต่ในระดับที่สูงขึ้นเมื่อโครงสร้างข้อมูลระดับต่ำที่มีประสิทธิภาพได้รับการดำเนินการมักจะผ่านnumpy.ndarray
ของ
การเขียนโปรแกรม OO หมายถึงการผูกข้อมูลกับวิธีการที่ทำงานกับข้อมูลในระดับที่สูงขึ้นของนามธรรม (ตัวอย่าง: ฉันใช้รหัส FEM ซึ่งเมทริกซ์ความแข็งถูกกำหนดเป็นคลาสที่มีวิธีสำหรับการแยกตัวประกอบแบบซูเปอร์ - โหนด cholesky แบบกระจัดกระจายการใช้งานครั้งแรกในแกน: เมื่อต้องการการใช้งานนอกหลัก ได้มาจากการสืบทอดและการปรับการจัดเก็บข้อมูลที่ขีดเส้นใต้เพียงเล็กน้อยเกือบ 100% ของรหัส cholesky super-nodal ถูกนำมาใช้ใหม่)
ความคิดเห็นล่าสุด แต่สำคัญ: ขั้นตอนการคำนวณที่มีประสิทธิภาพเป็นผลมาจากการทำแผนที่อัจฉริยะของอัลกอริทึมและโครงสร้างข้อมูลไปยังสถาปัตยกรรมการคำนวณเป้าหมายของคุณ หากคุณเริ่มต้นด้วยโครงสร้างข้อมูลที่ไม่ถูกต้องจะไม่มีวิธีการกู้คืนประสิทธิภาพหากไม่มีการเขียนซ้ำทั้งหมด