เขียนเอง · หา Bug แล้วเขียนต่อ
____ และเลือก vectorized / การวาดกราฟเอง. . .
Important
เนื้อหานี้เป็น เนื้อหาเสริม เท่านั้น — เนื้อหาที่เป็นทางการดูได้จาก exam.cmu.ac.th
ไม่มี ____ · เลือกเองว่าจะใช้ axis, boolean mask, broadcasting หรือกราฟชนิดใด
มี array 2 มิติ (แถว = นักศึกษา, คอลัมน์ = วิชา) จงหาค่าเฉลี่ยของแต่ละคน และค่าเฉลี่ยที่สูงสุด
คิดก่อน: เฉลี่ยรายแถว ใช้ .mean(axis=1) (axis=1 = ยุบคอลัมน์) · แล้วหา .max()
มี array อุณหภูมิ จงดึงเฉพาะค่าที่ >= 35 ออกมา แล้วบอกว่ามีกี่ค่า
คิดก่อน: สร้าง mask ด้วย temps >= 35 แล้วใช้ temps[mask] — ไม่ต้องเขียน loop เลย
มี array ราคาสินค้า จงคิดราคาสุทธิ = ลด 10% แล้วบวกค่าส่ง 20 บาททุกชิ้น (ทำทั้ง array ทีเดียว)
คิดก่อน: ใช้ตัวเลขคูณ/บวกกับ array ได้ตรง ๆ (broadcasting) — prices * 0.9 + 20 ไม่ต้อง loop
วาด bar chart ยอดขาย 4 เดือน (Jan–Apr) พร้อม title, xlabel, ylabel และชื่อเดือนบนแกน x
คิดก่อน: plt.bar(ชื่อเดือน, ยอดขาย) แล้วเติม .title() .xlabel() .ylabel() และปิดท้ายด้วย plt.show()
โค้ดเริ่มต้นมี บั๊ก 1 จุด และยังทำไม่ครบ — แก้บั๊กก่อน แล้วเขียนส่วนที่เหลือ
โค้ดนี้ควรหาค่าเฉลี่ยของแต่ละคอลัมน์ แต่กลับได้ค่าเฉลี่ยของแต่ละแถว
งาน: (1) แก้ axis ให้ถูก · (2) เขียนต่อให้พิมพ์ค่าเฉลี่ยรวมทั้ง array
Important
บั๊ก: axis=1 = ยุบคอลัมน์ → ได้เฉลี่ยรายแถว · ต้องการรายคอลัมน์ ใช้ axis=0 (ยุบแถว)
โค้ดนี้ตั้งใจแก้เฉพาะ b แต่ a กลับเปลี่ยนตามไปด้วย
งาน: (1) แก้ให้ a ไม่เปลี่ยน · (2) เขียนต่อให้พิมพ์ทั้ง a และ b
Important
บั๊ก: การ slice array ได้ view (ชี้ข้อมูลก้อนเดียวกัน) → แก้ b กระทบ a · ต้องใช้ a[1:3].copy()
โค้ดนี้ควรวาดกราฟเส้นของเลขกำลังสอง แต่รันแล้วไม่เห็นกราฟ
งาน: (1) แก้ให้กราฟแสดง · (2) เขียนต่อให้ใส่ title, xlabel, ylabel และ legend
Important
บั๊ก: ไม่มี plt.show() → กราฟไม่ถูกแสดง · ต้องปิดท้ายด้วย plt.show() เสมอ
ฟังก์ชันนี้ควร normalize array โดยไม่แตะข้อมูลเดิม แต่หลังเรียกใช้ original กลับเปลี่ยน
งาน: (1) อธิบายว่า original เปลี่ยนเพราะอะไร · (2) แก้ให้ original ไม่ถูกแตะต้อง
Important
สาเหตุ: Python ส่ง NumPy array แบบ pass-by-object-reference — data และ original ชี้ array ก้อนเดียวกัน · data -= data.min() เป็น in-place จึงแก้ต้นฉบับตรง ๆ (เหมือน view ใน M12b)
แก้: data = data.copy() บรรทัดแรกในฟังก์ชัน หรือเปลี่ยนเป็น data = data - data.min()
result : [0. 0.33333333 0.66666667 1. ]
original: [10. 20. 30. 40.]
พร้อมใช้ NumPy & Matplotlib กับงานจริงแล้ว! ทบทวนรายโมดูลได้ที่ M11 Matplotlib · M12a NumPy · M12b NumPy
🏠 259201 — ทบทวนรวม NumPy & Matplotlib | ภาควิชาวิศวกรรมคอมพิวเตอร์ คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเชียงใหม่