การใช้ %mprun: Hero BMI 2.0
มาดูกันว่าการเปลี่ยนวิธีคำนวณค่า BMI จะช่วยประหยัดหน่วยความจำได้หรือไม่ อย่างที่ทราบกัน ความสูงและน้ำหนักของฮีโร่แต่ละคนถูกเก็บไว้ใน numpy array ดังนั้นจึงสามารถใช้การ indexing และ broadcasting ของ NumPy ในการคำนวณได้ มีฟังก์ชันชื่อ calc_bmi_arrays ถูกสร้างและบันทึกไว้ในไฟล์ชื่อ bmi_arrays.py ดังที่แสดงด้านล่าง:
def calc_bmi_arrays(sample_indices, hts, wts):
# Gather sample heights and weights as arrays
s_hts = hts[sample_indices]
s_wts = wts[sample_indices]
# Convert heights from cm to m and square with broadcasting
s_hts_m_sqr = (s_hts / 100) ** 2
# Calculate BMIs as an array using broadcasting
bmis = s_wts / s_hts_m_sqr
return bmis
สังเกตว่าฟังก์ชันนี้ทำการคำนวณทั้งหมดโดยใช้arrays
มาดูว่าการใช้ array แบบนี้จะช่วยลด memory footprint ได้หรือไม่:
- โหลดแพ็กเกจ
memory_profilerเข้าสู่ IPython session - import
calc_bmi_arraysจากbmi_arrays - เมื่อดำเนินการขั้นตอนข้างต้นเสร็จแล้ว ให้ใช้
%mprunเพื่อ profile ฟังก์ชันcalc_bmi_arrays()กับข้อมูลซูเปอร์ฮีโร่ของคุณ arraysample_indices,htsและwtsถูกโหลดเข้าสู่ session แล้ว
เมื่อเขียนโค้ดเสร็จแล้ว ให้ตอบคำถามต่อไปนี้:
บรรทัดโค้ดที่ทำ array indexing และ broadcasting ในฟังก์ชัน calc_bmi_array() ใช้หน่วยความจำรวมเท่าไร (กล่าวคือ ผลรวมทั้งหมดของคอลัมน์ Increment สำหรับสี่บรรทัดนี้คือเท่าใด)?
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การเขียน Python Code ที่มีประสิทธิภาพ
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำจริง
เปลี่ยนทฤษฎีให้เป็นการลงมือทำด้วยแบบฝึกหัดเชิงโต้ตอบหนึ่งในของเรา
เริ่มแบบฝึกหัด