เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การใช้ %lprun: แก้ไข bottleneck

ในแบบฝึกหัดที่แล้ว คุณได้ทำการ profile ฟังก์ชัน convert_units() และพบว่า list comprehension ของ new_hts อาจเป็น bottleneck ที่ควรแก้ไข สังเกตไหมว่า list comprehension ของ new_wts ก็ใช้เวลาคิดเป็นสัดส่วนใกล้เคียงกันด้วย นั่นเป็นสัญญาณว่าควรลองสร้างออบเจ็กต์ new_hts และ new_wts ด้วยเทคนิคอื่น

เนื่องจากข้อมูลความสูงและน้ำหนักของแต่ละฮีโร่ถูกเก็บไว้ใน numpy array จึงสามารถใช้ array broadcasting แทน list comprehension ในการแปลงค่าได้ ซึ่งได้นำไปใช้งานในฟังก์ชันด้านล่างแล้ว:

def convert_units_broadcast(heroes, heights, weights):

    # Array broadcasting instead of list comprehension
    new_hts = heights * 0.39370
    new_wts = weights * 2.20462

    hero_data = {}

    for i,hero in enumerate(heroes):
        hero_data[hero] = (new_hts[i], new_wts[i])

    return hero_data

โหลดแพ็กเกจ line_profiler เข้า IPython session จากนั้นใช้ %lprun เพื่อ profile ฟังก์ชัน convert_units_broadcast() กับข้อมูลซูเปอร์ฮีโร่ของคุณ ฟังก์ชัน convert_units_broadcast(), รายการ heroes, array hts และ array wts ถูกโหลดเข้า session แล้ว เมื่อเขียนโค้ดเสร็จแล้ว ให้ตอบคำถามต่อไปนี้:

บรรทัดโค้ดที่ใช้ array broadcasting สำหรับ new_hts ใช้เวลาคิดเป็นกี่เปอร์เซ็นต์ของเวลาทั้งหมดที่ฟังก์ชัน convert_units_broadcast() ใช้ไป?

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การเขียน Python Code ที่มีประสิทธิภาพ

ดูคอร์ส

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำจริง

เปลี่ยนทฤษฎีให้เป็นการลงมือทำด้วยแบบฝึกหัดเชิงโต้ตอบหนึ่งในของเรา

เริ่มแบบฝึกหัด