Dùng %mprun: BMI của siêu anh hùng
Bạn muốn tính chỉ số khối cơ thể (BMI) cho một mẫu siêu anh hùng đã chọn. BMI được tính theo công thức dưới đây:

Một mẫu ngẫu nhiên gồm 25.000 siêu anh hùng đã được nạp vào phiên làm việc của bạn dưới dạng một mảng tên là sample_indices. Mẫu này là danh sách các chỉ số tương ứng với vị trí của từng siêu anh hùng được chọn từ danh sách heroes.
Một hàm tên calc_bmi_lists cũng đã được tạo và lưu trong tệp bmi_lists.py. Để tiện theo dõi, hàm được hiển thị bên dưới:
def calc_bmi_lists(sample_indices, hts, wts):
# Gather sample heights and weights as lists
s_hts = [hts[i] for i in sample_indices]
s_wts = [wts[i] for i in sample_indices]
# Convert heights from cm to m and square with list comprehension
s_hts_m_sqr = [(ht / 100) ** 2 for ht in s_hts]
# Calculate BMIs as a list with list comprehension
bmis = [s_wts[i] / s_hts_m_sqr[i] for i in range(len(sample_indices))]
return bmis
Lưu ý hàm này thực hiện mọi phép tính cần thiết bằng list comprehension (vì vậy mới đặt tên là calc_bmi_lists()). Hãy đi sâu hơn và phân tích mức sử dụng bộ nhớ khi thực hiện các phép tính bằng list:
- Nạp gói
memory_profilervào phiên IPython của bạn. - Import
calc_bmi_liststừbmi_lists. - Sau khi hoàn tất các bước trên, dùng
%mprunđể profile hàmcalc_bmi_lists()trên dữ liệu siêu anh hùng của bạn. Các mảnghtsvàwtsđã được nạp sẵn trong phiên làm việc của bạn.
Sau khi viết mã xong, hãy trả lời câu hỏi sau:
Các dòng mã dùng list comprehension trong hàm calc_bmi_lists() tiêu tốn bao nhiêu bộ nhớ? (tức là tổng của cột Increment cho bốn dòng mã này là bao nhiêu?)
Bài tập này là một phần của khóa học
Viết mã Python hiệu quả
Bài tập tương tác thực hành
Biến lý thuyết thành hành động với một trong các bài tập tương tác của chúng tôi
Bắt đầu bài tập