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: ดร. ฐิติพัทธ อัชชะกุลวิสุทธิ์