ฉันจะแบ่งคำตอบออกเป็นสามส่วน การทำโปรไฟล์เร่งโค้ดไพ ธ อนด้วย c และเร่งไพ ธ อนผ่านไพ ธ อน ฉันคิดว่า Python มีเครื่องมือที่ดีที่สุดในการดูประสิทธิภาพของรหัสของคุณจากนั้นเจาะลงไปที่คอขวดจริง การเร่งโค้ดโดยไม่มีการทำโปรไฟล์นั้นเหมือนกับการพยายามฆ่ากวางด้วย uzi
หากคุณกำลังสนใจจริงๆเท่านั้นในผลิตภัณฑ์เสื่อ vec ฉันอยากจะแนะนำscipy.sparse
เครื่องมือ Python สำหรับการทำโปรไฟล์
โมดูลโปรไฟล์และ cProfile :โมดูลเหล่านี้จะให้การวิเคราะห์เวลาทำงานมาตรฐานและสแตกการเรียกฟังก์ชันของคุณ มันค่อนข้างดีที่จะบันทึกสถิติและใช้โมดูล pstats คุณสามารถดูข้อมูลได้หลายวิธี
kernprof : เครื่องมือนี้รวบรวมกิจวัตรหลายอย่างไว้ด้วยกันเพื่อทำสิ่งต่าง ๆ เช่นการจับเวลาด้วยรหัสบรรทัด
memory_profiler : เครื่องมือนี้สร้างการพิมพ์ตามหน่วยความจำบรรทัดของโค้ดของคุณ
ตัวจับเวลา IPython :timeit
ฟังก์ชั่นค่อนข้างดีสำหรับการเห็นความแตกต่างของฟังก์ชั่นในวิธีการโต้ตอบที่รวดเร็ว
เร่งความเร็ว Python
Cython : cython เป็นวิธีที่รวดเร็วที่สุดในการใช้ฟังก์ชั่นบางอย่างใน python และรับโค้ดที่เร็วขึ้น คุณสามารถตกแต่งฟังก์ชั่นด้วยตัวแปรของไพ ธ อนของไพ ธ อนและสร้างรหัส c นี่คือการบำรุงรักษามากและยังสามารถเชื่อมโยงไปยังรหัสที่เขียนด้วยมืออื่น ๆ ใน c / c ++ / fortran ค่อนข้างง่าย มันเป็นเครื่องมือที่ต้องการในปัจจุบัน
ctypes : ctypes จะช่วยให้คุณสามารถเขียนฟังก์ชั่นของคุณใน c แล้วห่อมันอย่างรวดเร็วด้วยการตกแต่งที่เรียบง่ายของรหัส มันจัดการกับความเจ็บปวดทั้งหมดของการคัดเลือกนักแสดงจาก PyObjects และจัดการ gil เพื่อเรียกใช้ฟังก์ชัน c
มีวิธีการอื่นสำหรับการเขียนโค้ดของคุณใน C แต่ทั้งหมดนั้นค่อนข้างมากกว่าสำหรับการใช้ไลบรารี่ C / C ++ และห่อมันไว้ใน Python
วิธีการเฉพาะ Python
หากคุณต้องการอยู่ใน Python ส่วนใหญ่คำแนะนำของฉันคือการพิจารณาว่าคุณใช้ข้อมูลใดและเลือกประเภทข้อมูลที่ถูกต้องสำหรับการใช้อัลกอริทึมของคุณ เป็นประสบการณ์ของฉันที่คุณมักจะได้รับมากขึ้นโดยการปรับโครงสร้างข้อมูลของคุณแล้วแฮ็คระดับต่ำ ตัวอย่างเช่น:
numpy : อาเรย์ที่แน่นอนสำหรับการดำเนินการของอาเรย์อย่างรวดเร็ว
numexpr : เครื่องมือเพิ่มประสิทธิภาพนิพจน์อาเรย์ numpy จะช่วยให้การแสดงออกหลายแถวอาร์เรย์ numpy และยังได้รับการกำจัดชั่วคราวจำนวนมากทำให้เนื่องจากการ จำกัด ของล่ามหลาม
blist : การนำ b-tree ไปใช้ของรายการรวดเร็วมากสำหรับการแทรกการทำดัชนีและการย้ายโหนดภายในของรายการ
แพนด้า : เฟรมข้อมูล (หรือตาราง) การวิเคราะห์ที่รวดเร็วมากในอาร์เรย์
pytables : ตารางที่มีโครงสร้างแบบรวดเร็ว (เช่น hdf5) ซึ่งเหมาะอย่างยิ่งสำหรับการคำนวณหลักและแบบสอบถามสำหรับข้อมูลขนาดใหญ่