N-dimensional Array using NumPy (I) — แบบฝึกทบทวน
. . .
Note
ครอบคลุม: สร้าง array · .shape/.dtype · element-wise · broadcasting · np.arange · สถิติ + axis ทบทวนเนื้อหาเต็มได้ที่ Module 12a 👈
เลือกคำตอบที่ถูกต้อง — เฉลยจะปรากฏเมื่อกดถัดไป
รูปแบบ import ที่นิยมสำหรับ NumPy คือข้อใด?
A. import numpy as np
B. import np
C. from numpy import all
Tip
ตอบ: A — ตั้ง alias np แล้วเรียก np.array(), np.arange() ได้กระชับ
ทุก item ใน NumPy array เดียวกันต้องเป็นอย่างไร?
A. ต่างชนิดกันได้
B. ชนิดเดียวกันทั้งหมด
C. เป็นตัวเลขเท่านั้น
Tip
ตอบ: B — array บังคับให้ทุก item ชนิดเดียวกัน (ต่างจาก List) — ถ้าต่างชนิด NumPy จะแปลงให้อัตโนมัติ
.shape เขียนโดยไม่มี () ต่อท้าย เพราะอะไร?
A. เป็น property (บอกสถานะ) ไม่ใช่ function
B. เป็น keyword
C. เขียนผิด
Important
ตอบ: A — .shape, .dtype เป็น property (ไม่มี ()) · ส่วน .array(), .append() เป็น function (มี ())
np.array([1,2,3]) + np.array([10,20,30]) ให้ผลใด?
A. [11, 22, 33]
B. [1,2,3,10,20,30]
C. error
Tip
ตอบ: A — operator ทำงานแบบ element-wise (item ตำแหน่งเดียวกัน) ต่างจาก List ที่ + = ต่อกัน
เมื่อ array มี shape ไม่เท่ากัน NumPy ใช้กลไกใดกระจายการคำนวณ?
A. Broadcasting
B. Slicing
C. Casting
Tip
ตอบ: A — Broadcasting กระจายการคำนวณได้เมื่อ shape สอดคล้องตามกฎ (เช่น array ⊕ ตัวเลขเดี่ยว)
ทำไมต้องใช้ np.arange(1, 11, 0.5) แทน range(1, 11, 0.5)?
A. np.arange สั้นกว่า
B. range() รับ step เป็น float ไม่ได้ (error)
C. เหมือนกันทุกอย่าง
Important
ตอบ: B — range() สร้างได้เฉพาะจำนวนเต็ม · np.arange() สร้างเลขทศนิยมได้ (ผลเป็น NumPy array)
np.sum(x) โดยไม่กำหนด axis ให้ผลเป็นอะไร?
A. ผลรวมแต่ละ column
B. ผลรวมแต่ละ row
C. ค่าเดียว (ยุบทั้ง array)
Tip
ตอบ: C — ไม่ระบุ axis → ยุบทั้ง array เหลือค่าเดียว · axis=0 = แต่ละ column · axis=1 = แต่ละ row
โค้ดจะพิมพ์อะไร? — ทายก่อน แล้วกดถัดไปดูเฉลย
Tip
ผลลัพธ์: [ 1 4 9 16] — ยกกำลังสองแบบ element-wise (broadcasting กับตัวเลขเดี่ยว 2)
Important
ผลลัพธ์: [1 6 5 10] — axis=0 ยุบแถวเหลือผลรวมแต่ละ column: 1+0, 5+1, 3+2, 1+9
Tip
ผลลัพธ์: int64 float64 — b มี 2.0 (float) → NumPy แปลงทุก item เป็น float ให้เป็นชนิดเดียวกัน
โค้ดผิดตรงไหน — ทำไม
ผิดตรงไหน?
Important
ผิด: range() รับ step เป็น float ไม่ได้ → TypeError แก้: ใช้ np.arange(1, 11, 0.5)
ผิดตรงไหน?
Important
ผิด: shape (3,2) กับ (2,3) broadcast เข้ากันไม่ได้ → ValueError แก้: ให้ shape สอดคล้องกัน (เช่น transpose ตัวหนึ่ง หรือใช้ shape เท่ากัน)
เติมโค้ดในช่อง ____ แล้วกด Run (มี NumPy จริง)
เติมโค้ดสร้าง array 2 มิติ แล้วดู .shape
เติมโค้ดสร้าง x ตั้งแต่ 1 ถึง 10.5 เพิ่มทีละ 0.5 แล้วหา y = x^2 + 2x + 1
เติม axis ให้ถูกต้อง — ผลรวมแต่ละ column และแต่ละ row
Note
ฝึกเพิ่ม — สองจุดที่งงบ่อยสุดของ NumPy
Tip
ผลลัพธ์:
[[11 12 13]
[14 15 16]]
broadcasting — ตัวเลขเดี่ยว 10 ถูกกระจายบวกเข้าไปทุก item
x shape (2,3) · y shape (3,) — ได้ผลอะไร?
Important
ผลลัพธ์:
[[11 22 33]
[14 25 36]]
broadcasting — y (1 row) ถูกกระจายไปบวกทุก row ของ x
Tip
ผลลัพธ์: [ 9 12] แล้ว [ 3 7 11] axis=0 ยุบแถว → ผลแต่ละ column (1+3+5, 2+4+6) · axis=1 ยุบ column → ผลแต่ละ row
ประมวลผลข้อมูลการวัดด้วย NumPy
Tip
ผลลัพธ์: 10.0 — วัดซ้ำ 5 ครั้ง แล้วหาค่าเฉลี่ยด้วย np.mean()
Important
ผลลัพธ์: [110. 220. 330.] — คูณ factor 1.1 กระจายเข้าไปทุก item (element-wise)
เติม axis ให้หาค่าเฉลี่ยแต่ละ column ของตารางการวัด
Tip
ผลลัพธ์: [20 20 12] — element-wise: หาแรงของแต่ละวัตถุพร้อมกัน \(F = ma\)
broadcasting หลายขั้นในบรรทัดเดียว
ทำให้แต่ละ column มี mean 0, std 1: \((x - \text{mean}) / \text{std}\) — เติม axis
Note
x.mean(axis=0) = [3. 4.], x.std(axis=0) ≈ [1.63 1.63] → broadcasting ลบ/หารทีละ column พร้อมกัน
ทบทวนเนื้อหาเต็มได้ที่ Module 12a · ไปต่อ Module 12b
🏠 259201 — Module 12a ทบทวน | ภาควิชาวิศวกรรมคอมพิวเตอร์ คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเชียงใหม่