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

Hướng dẫn

50 XP

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