Dùng %mprun: Hero BMI 2.0
Hãy kiểm tra xem dùng một cách tiếp cận khác để tính BMI có giúp tiết kiệm bộ nhớ hay không. Như bạn nhớ, chiều cao và cân nặng của mỗi siêu anh hùng được lưu trong một mảng numpy. Điều đó có nghĩa là bạn có thể tận dụng khả năng lập chỉ mục mảng và broadcasting tiện lợi của NumPy để thực hiện các phép tính. Một hàm tên là calc_bmi_arrays đã được tạo và lưu trong tệp bmi_arrays.py. Để tiện theo dõi, nó được hiển thị bên dưới:
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
Lưu ý rằng hàm này thực hiện mọi phép tính cần thiết bằng các mảng.
Hãy xem liệu cách tiếp cận dùng mảng được cập nhật này có giúp giảm mức sử dụng bộ nhớ hay không:
- Nạp gói
memory_profilervào phiên IPython của bạn. - Import
calc_bmi_arraystừbmi_arrays. - Sau khi hoàn tất các bước trên, dùng
%mprunđể profile hàmcalc_bmi_arrays()trên dữ liệu siêu anh hùng của bạn. Các mảngsample_indices,htsvàwtsđã được nạp vào phiên của bạn.
Sau khi bạn viết mã xong, hãy trả lời câu hỏi sau:
Các dòng mã lập chỉ mục mảng và broadcasting trong hàm calc_bmi_array() tiêu tốn bao nhiêu bộ nhớ? (tức là tổng cộ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