N-dimensional Array using NumPy (I)
NumPy arrayNote
Live Code ในโมดูลนี้ใช้ NumPy จริงใน browser (Pyodide) — กด Run เพื่อดูผลลัพธ์ · โมดูลนี้แบ่งเป็น 2 ตอน ตอนต่อไป → Module 12b — เข้าถึงข้อมูล & Matrix
ไลบรารีสำหรับ array หลายมิติ และการคำนวณเชิงตัวเลข
array หลายมิติ ใน PythonNumPy arrayจุดเด่นของ NumPy
ก่อนใช้งานต้อง import โมดูล (นิยมตั้งชื่อเล่นว่า np)
สร้างตัวแปร data1 เป็น list ที่เก็บตัวเลขตั้งแต่ 1 ถึง 10,000 โดยใช้ list comprehension
Note
สร้างตัวแปร data2 ที่เก็บตัวเลข 1 ถึง 10,000 แบบเดียวกัน แต่คราวนี้ใช้ NumPy (np.arange())
เปรียบเทียบการบวก 1 ให้ทุก item ของ [0,1,...,9999] ด้วย List comprehension กับ NumPy (รัน 5 ครั้ง ครั้งละ 1000 รอบ)
Tip
NumPy เร็วกว่ามาก เพราะกระจายการคำนวณเข้าไปในทุก item โดยไม่ต้องใช้ loop ของ Python
np.array() · np.zeros() · np.ones() · np.identity() · np.arange()
np.array()ใช้ np.array() สร้าง NumPy array จาก List (List ที่ส่งให้อาจมีมากกว่า 1 มิติ)
Note
ทบทวน: 2D list (Module 10)
สร้างตัวแปร x1, x2, x3
x1 — array 1 มิติ [1 2 3 4 5 6] (สร้างด้วย numpy array)x2 — array 2 มิติ [[1,2,3],[11,22,33],[10,20,30]] (numpy array)x3 — array 2 มิติ เดียวกัน แต่สร้างด้วย 2D listแสดงผล array x1, x2 และ 2D list x3
Tip
การ print() array จะจัดรูปแบบ ไม่มี comma และขึ้นบรรทัดใหม่ในแต่ละ row → อ่านง่ายกว่า List
.shapeproperty .shape บอกขนาดในแต่ละมิติ (ผลลัพธ์เป็น Tuple)
Note
ทบทวน: Tuple (Module 4)
function vs propertyfunction — ต้องมี () ต่อท้าย
.upper() ของ String.append() ของ List.array() ของ NumPyใช้ ส่งข้อมูลให้ฟังก์ชันทำงาน
property — ไม่มี ()
.shape ของ NumPy array.dtype ของ NumPy arrayบอกสถานะปัจจุบันของข้อมูล
สังเกตความต่างระหว่าง 1D array 5 item กับ 2D array ขนาด 1×5
ทุก item ใน array เดียวกัน ต้องเป็นชนิดเดียวกัน (ต่างจาก List) — ถ้าสร้างจากข้อมูลต่างชนิด NumPy จะแปลงให้เป็นชนิดเดียวกันอัตโนมัติ
np.zeros() และ np.ones()สร้าง array ที่มีสมาชิกเป็น 0 หรือ 1 ทั้งหมด — ส่ง shape เป็น Tuple
(15,) — 1D 15 item · (2,4) — 2D 2×4 · (3,3,3) — 3D 3×3×3สร้าง array ต่อไปนี้ แล้วแสดงค่า
a — 1D array 10 ตัว เป็น 0 ทั้งหมดb — 2D array ขนาด 5x2 เป็น 1 ทั้งหมดc — 2D array ขนาด 2x5 เป็น 0 ทั้งหมดd — 3D array ขนาด 2x3x4 เป็น 1 ทั้งหมดสร้าง identity matrix ขนาด 5x5 ด้วย np.identity()
np.arange() กับข้อมูลทศนิยมrange() สร้างได้เฉพาะ จำนวนเต็ม — step เป็น float จะ error
np.arange(start, stop, step) สร้างรายการเลข ทศนิยม ได้ (ผลลัพธ์เป็น NumPy array)
สร้างข้อมูล x ตั้งแต่ 1 ถึง 10.5 เพิ่มทีละ 0.5 และ y = x^2 + 2x + 1
NumPy กระจายการคำนวณเข้าไปในทุก item ของ array
นำ array ไปคำนวณกับ ตัวเลขเดี่ยว (int/float) ด้วย operator ทางคณิตศาสตร์ → กระจายการคำนวณเข้าไปยังทุก item
หา y = x^10 และ z = 3x^2 เมื่อ x อยู่ในช่วง 1 ถึง 10 เพิ่มทีละ 0.5 แล้วแสดง x, y, z
Note
ใช้ operator กับ array ที่มี shape เหมือนกัน → คำนวณ item ตำแหน่งเดียวกัน (element-wise)
ทำงานแบบ element-wise เช่นกันสำหรับ array 2 มิติ
Warning
item-wise: * คือการคูณ item ตำแหน่งเดียวกัน — ไม่ใช่ การคูณเมตริกซ์ (matrix multiplication)
เมื่อ array มี shape ไม่เท่ากัน NumPy จะกระจายการคำนวณได้ก็ต่อเมื่อ shape สอดคล้องกับกฎ broadcasting
math โมดูลไม่รองรับ List/array ต้องใช้ loop/list comprehension ซึ่งไม่ค่อยมีประสิทธิภาพ
NumPy มีฟังก์ชันคณิตศาสตร์ที่กระจายการคำนวณเข้าไปในทุก item เช่น np.cos(), np.log(), np.sqrt(), np.sin() และค่าคงที่ np.pi, np.e
Note
ทบทวน: math module (Module 3)
np.sum() np.mean() np.max() np.min() np.var() np.std() — ถ้า ไม่กำหนด axis จะยุบ ทั้ง array เหลือ ค่าเดียว
np.sum(x) = 1+5+3+1+0+1+2+9 = 22
np.sum() np.mean() np.max() np.min() np.var() np.std() — array 2 มิติกำหนดทิศได้ด้วย axis
axis=0 → ยุบแถวเหลือผลแต่ละ column
axis=1 → ยุบ column เหลือผลแต่ละ row
หาค่าทางสถิติของ x = [[1,5,3,1],[0,1,2,9]]
NumPy array
import numpy as np · np.array()np.arange() np.zeros() np.ones() np.identity().shape .dtype · ทุก item ชนิดเดียวกันfunction มี () · property ไม่มี ()การคำนวณ
np.log() np.sin() np.sqrt() …np.sum/mean/max/min + axisTip
ไปต่อ Part II → Module 12b: index/slice, เงื่อนไข, View/Copy, Matrix
🏠 259201 — Module 12a | ภาควิชาวิศวกรรมคอมพิวเตอร์ คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเชียงใหม่