Basic Data Science : Vector

Vector คือ mathematical object ที่สามารถนำมาแสดงให้เห็นภาพได้ด้วยลูกศร ดังภาพ



ในการคำนวณ vector จะถูกเขียนแทนด้วยตำแหน่งของปลายลูกศร เช่น (x,y) , (4,5), (0,1) ,...

\( \vec{a} = (x,y) \) หรือ
\( \vec{OA} = (x,y) \),  [O คือ origin หรือตำแหน่ง (0,0)]


สิ่งที่ต้องคำนึงถึงในการคำนวณเกี่ยวกับ vector มีสองค่าคือ ขนาด (magnitude) และทิศทาง (direction) ของ vector

Magnitude ของ vector
คือขนาดหรือความยาวของ vector บางครั้งอาจใช้คำว่า norm ก็ได้ ใช้สัญญลักษณ์  \(\mid\mid OA\mid\mid \text{หรือ} \mid\mid x\mid\mid \) และใช้วิธีการคำนวณตามแบบของ Pythagoras [1]


\( \mid\mid OA\mid\mid = \sqrt[2]{x^2 + y^2} \)

ในกรณีที่ vector มีมิติที่มากขึ้น  \( \overrightarrow{OA} = (x_1,x_2,x_3,...,x_n) \) จะใช้ Euclidean norm หรือ Euclidean distance [2]

\(\mid\mid OA\mid\mid = \sqrt[2]{x_1^2 +x_2^2 +x_3^2 + ...+x_n^2 } \)


การใช้ Python คำนวณหาค่า magnitude ของ vector

import numpy as np

def magnitude(vector):
     return np.linalg.norm(vector)

x = [4,5] # 2 dimension vector
norm_x = magnitude(x)
print(norm_x)

y = [4,5,6,7,8] # 5 dimension vector
norm_y = magnitude(y)
print(norm_y)


Direction of vector

direction of vector คือ vector ที่เกิดจากการหาร vector เดิมด้วยขนาดของตัวเอง นั่นคือ
ถ้า \( \overrightarrow{u} = (x_1,x_2) \) แล้ว direction ของ \( \overrightarrow{u} \) คือ

\( \overrightarrow{w} = (\frac{x_1}{\mid\mid u \mid\mid},\frac{x_2}{\mid\mid u \mid\mid})\)

ภาษา Python ในการหา direction of vector

import numpy as np

def direction(vector):
     return vector / magnitude(vector)

x = [4,5] # 2 dimension vector
dir_x = direction(x)
print(dir_x)

y = [4,5,6,7,8] # 5 dimension vector
dir_y = direction(y)
print(dir_y)


Dot product
คือ operation ระหว่าง vector 2 vector ที่ได้ผลลัพธ์ออกมาเป็นตัวเลข (scalar) บางครั้งเรียกว่า scalar product

ในทาง geometry นิยาม dot product ของ 2 vector ไว้คือ

\( \large \bf {\vec{x} \cdot \vec{y} = \mid\mid x \mid\mid \times \mid\mid y \mid\mid \times cos(\theta)} \)


เมื่อ \( \theta\) คือมุมระหว่าง vector ทั้งสอง





def geo_dot(vect1,vect2,theta):
     mag_vect1 =  magnitude(vect1)
     mag_vect2 =  magnitude(vect2)
     geo_dot = mag_vect1 * mag_vect2 * np.cos(np.radians(theta))
     return geo_dot


x = [3,5]
y = [8,2]
theta = 45 # degrees
print(geo_dot(x,y,theta)) # 34.00000000000001



ในกรณีที่ไม่ทราบมุมระหว่าง vector ก็สามารถหาค่า dot product ได้จาก

\( \bf \large \vec x \cdot \vec y = \sum_{i=1}^n (x_i\times y_i) \)



def alg_dot(vect1,vect2):
     sum = 0
     for i in range(len(vect1)) :
          sum  += vect1[i] * vect2[i]

     return sum


x = [3,5]
y = [8,2]
print(alg_dot(x,y)) # 34

เทียบผลลัพธ์กับ numpy.dot()


x = [3,5]
y = [8,2]
print(alg_dot(x,y)) # 34
print(np.dot(x,y)) # 34








เอกสารอ้างอิง
[1] https://smarter-machine.blogspot.com/2018/03/trigonometry-trigonometry-identities.html
[2] https://en.wikipedia.org/wiki/Euclidean_distance

ความคิดเห็น