1. Học hỏi
  2. /
  3. Khoa Học
  4. /
  5. Viết mã Python hiệu quả

Connected

Bài tập

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:

BMI = mass(kg) / height(m)^2

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_profiler vào phiên IPython của bạn.
  • Import calc_bmi_lists từ bmi_lists.
  • Sau khi hoàn tất các bước trên, dùng %mprun để profile hàm calc_bmi_lists() trên dữ liệu siêu anh hùng của bạn. Các mảng hts và 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?)

Hướng dẫn

50 XP

Các phương án trả lời