NumPy#
numpy
เป็นหนึ่งในไลบรารี่ของ Python ที่ใช้สำหรับการคำนวณที่ต้องใช้ข้อมูลหลายมิติ (array)numpy
มีประวัติศาสตร์ยาวนานถูกสร้างขึ้นตั้งแต่ปี 2005 โดย Travis Oliphant และถูกใช้งานในการคำนวณทางวิทยาศาสตร์หลากหลายอย่างจนได้รับความนิยมอย่างมากในปัจจุบันnumpy
มี object ที่สำคัญคือ ndarray (หรือ n-dimensional array) ที่ใช้ในการคำนวณ
ส่วนมากไลบรารี่ numpy จะถูก install มาพร้อมกับ Python อยู่แล้ว แต่ถ้ายังไม่ได้ install มากับโปรแกรม Python สามารถใช้ pip (Python package manager) ในการลงได้
!pip install numpy
Importing NumPy#
การใช้ไลบรารี่ NumPy (บางครั้งอาจจะใช้ numpy, Numpy เพื่อความสะดวก) จะต้องทำการ import ไลบรารี่ก่อนโดยใช้
import numpy as np
NumPy Arrays#
NumPy arrays หรือ multidimensional array (ndarray
หรือ array
) เป็นเหมือนโครงสร้างข้อมูลหลักของไลบรารี่ โดย arays มีความคล้ายคลึงกับ list ใน Python แต่ว่าสร้างขึ้นมาเพื่อประสิทธิภาพในการคำนวณ
ตัวอย่างของ Array จะหน้าตาเหมือนกับลิสต์เลย ยกตัวอย่างเช่น
[[1, -1, 0],
[3, 4, 8]]
เป็น array ที่มี 2 แถว (row) และ 3 หลัก (column) หรือบางครั้งบอกได้ว่าแกน (axis) แรกมีความยาวเท่ากับ 2 และแกนที่สองมีความยาวเท่ากับ 3
import numpy as np
# การสร้าง array สามารถสร้างได้จากลิสต์ของ Python
A = np.array([[3, 4, -10], [2, 3, 5]])
print("A array:\n", A)
print("A shape: ", A.shape) # (2, 3) -> 2 rows, 3 columns
Z = np.zeros((2, 3)) # [[0, 0, 0], [0, 0, 0]]
print("Z array:\n", Z)
O = np.ones((2, 3)) # [[1, 1, 1], [1, 1, 1]]
print("O array:\n", O)
# สร้าง array ที่มีค่าสุ่มจากช่วง 0 ถึง 1 ที่มีขนาด 2 x 3
R = np.random.rand(2, 3)
print("R array:\n", R)
r_1 = np.arange(0, 10) # สร้าง array จาก 0 ถึง 9
print(r_1)
r_2 = np.arange(0, 1, 0.1) # สร้าง array จาก 0 ถึง 1 ที่เว้นทีละ 0.1
print(r_2)
Operations#
NumPy มี operations คล้ายกับ Python ที่สามารถ +, -, *, / ระหว่าง array ได้ แต่ข้อดีคือเราไม่ต้องใช้ for loop ในการทำ operation สำหรับ array หลายมิติ เช่น
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(np.dot(a, b)) # dot product (คูณ array 2 ตัว)
A = np.array([[1, 0], [0, 1]])
B = np.array([[-10, -3], [1, 4]])
print(A.dot(B)) # การ dot product ระหว่าง array (การคูณ matrix) จะได้ผลลัพธ์ [[-10 -3], [ 1 4]]
print(np.dot(A, B)) # จะได้ผลลัพธ์ [[-10 -3], [ 1 4]]
Selection, Transpose, Reshape NumPy Arrays#
เมื่อสร้าง array มาแล้วเราสามารถเลือกข้อมูลบางส่วนของ array, เชื่อมต่อ array, หรือเปลี่ยนมิติ array ได้ด้วยคำสั่งต่างๆ
การเลือกบาง array สามารถนำมาใช้คัดบาง column ที่เราสนใจจากข้อมูลได้ หรือจะใช้แบ่งข้อมูลตาม row ก็ได้
การเชื่อม array มีบทบาทสำคัญมากๆในอนาคตโดยอาจนำมาใช้เชื่อมต่อข้อมูล หรือว่าเชื่อมข้อมูลจากหลายที่เข้าด้วยกัน
การเปลี่ยนมิติใช้ในการจัด dimension ให้เหมาะสมกับการประมวลผล
b = np.array([[2, 3, 4], [7, 2, -3]])
print("b:\n", b)
print("transpose of b:\n", b.T)
print("b[:, 1]:\n", b[:, 1]) # เลือกทุกแถว, หลักที่ 1
print("b[:, 0:2]:\n", b[:, 0:2]) # เลือกทุกแถว หลักที่ 0 ถึง 2
print("b[0, 0:2]:\n", b[1, 0:2])
v = np.array([[-4, -2, -3], [-1, 2, 7]])
print(np.vstack((b, v))) # เชื่อม array แนวตั้ง (vertical)
print(np.hstack((b, v))) # เชื่อม array แนวนอน (horizontal)
print(np.concatenate((b, v), axis=0)) # เชื่อมแนวตั้งโดยใช้คำสั่ง concatenate
cr = np.array([[10, 1, 3, 1, 2, 7]])
print(cr.reshape(6, 1)) # เปลี่ยนเป็นแนวตั้ง 6x1
print(cr.reshape(3, 2)) # เปลี่ยนเป็นขนาด 3x2
print(cr.ravel()) # ลด dimension จาก 1x6 (1, 6) เป็น (6,) หรือ flatten นั่นเอง
อ่านเพิ่มเติมสำหรับการใช้ .ravel()
ได้ที่ numpy.ravel
เนื่องจากการ flatten array ทำได้หลายวิธี
NumPy functions#
NumPy มีฟังก์ชันต่างๆมากมายที่ใช้ในการคำนวณที่ช่วยให้เรานำมาวิเคราะห์ข้อมูลไดในอนาคต เช่น การหาค่าเฉลี่ย np.mean
, การหาค่ามัธยฐาน np.median
, รวมถึงค่าความเบี่ยงเบนของข้อมูล np.std
โดยการใช้ฟังก์ชั่นอาจจะทำในแกนที่เราสนใจก็ได้ (ตาม column ใช้ axis=0
, ตาม row ใช้ axis=1
)
a = np.array([2, 4, 12])
print(np.sqrt(a))
# operation ที่ทำทั้ง array
print(np.mean(a)) # ค่าเฉลี่ย 6.0
print(np.max(a)) # 12
print(np.min(a)) # 2
X = np.array([[1, 1.6], [1.2, 1.8], [2.3, 3.5]])
print(X)
print(X.mean(axis=0)) # หาค่าเฉลี่ยตาม column
print(X.mean(axis=1)) # หาค่าเฉลี่ยตาม row
# ทดลองหักลบค่าเฉลี่ยจากทุกแถว
print("\nSubtract average in column:\n")
print(X - X.mean(axis=0))
Conclusion#
ในตัวอย่างนี้ เราได้ทดลองใช้ Numpy สร้าง array และทดลองใช้ operations ต่างๆที่ NumPy array มี เช่น การบวก ลบ คูณ หาร รวมถึงการคูณเมทริกซ์ เราได้ทดลองเชื่อม array และทดลองใช้ฟังก์ชั่นการคำนวณต่างๆของ NumPy ที่สามารถนำไปใช้เป็นพื้นฐานในการเรียนบทเรียนถัดไปได้
ผู้จัดเตรียม code ใน tutorial: ดร. ฐิติพัทธ อัชชะกุลวิสุทธิ์