向(xiang)量那點(dian)事兒
一、向量
這(zhe)次我(wo)們繼續聊一下向量。
向量可以理解為一個有方向的量。
它既有大小(長度),又有方向(指向哪里)。
生(sheng)活中很多東西都可以用(yong)向量描述,比如:
- ?? 速度(你開車 60 km/h 向東)
- ??? 風(風速 5 m/s 向北)
- ?? 力(用 10 牛頓的力推箱子向右)
坐標表示
在數學(xue)里(li),我(wo)們(men)通常(chang)用坐標來表(biao)示(shi)向量;而在幾何空間中,常(chang)常(chang)用箭頭來表(biao)示(shi)向量,箭頭的(de)長度(du)表(biao)示(shi)大小(模(mo)),方向表(biao)示(shi)向量的(de)方向。
- 在二維空間中,一個向量表示如下:
其中 x 表示水平方向分量,y 表示豎直方向分量。
向量的模長為:\(|\vec{v}| = \sqrt{x^2 + y^2}\)
- 在三維空間中,一個向量表示如下:
其中 x, y, z 分別是沿三個坐標軸的分量。
向量的模長為:\(|\vec{v}| = \sqrt{x^2 + y^2 + z^2}\)
- 在N維空間中,一個向量表示如下:
其中 x1...xn 分別是各個維度的分量。
向量的模長為:\(|\vec{v}| = \sqrt{x_1^2 + x_2^2 + \dots + x_n^2} \\\)
二、加減法
向量加法
設定:
那么有:
加法(fa)的幾何意義(yi),可以使用三角(jiao)形(xing)法(fa)則或平(ping)行四邊形(xing)法(fa)則來說明:
簡單的可以理解為,\(\vec{a}+\vec{b}\) 就是從坐標原點沿著\(\vec{a}\)行進后,再沿著\(\vec{b}\)行進。
應用示例
假定有兩股方向的力(li),如(ru)下:
\(\vec{F_1} = (3, 4), \quad \vec{F_2} = (1, 2)\)
那么這(zhe)兩股力的合力為:
\(\vec{F} = \vec{F_1} + \vec{F_2} = (3+1, 4+2) = (4, 6)\)
向量減法
設定:
那么有:
加法(fa)的(de)幾(ji)何意義,可(ke)以使(shi)用三角(jiao)形法(fa)則(ze)或平行四邊形法(fa)則(ze)來說明:
簡單的可以理解為,\(\vec{a}-\vec{b}\) 就是從b的終點開始,朝著\(\vec{a}\)的終點行進的向量。
應用示例
在船的航行過(guo)程中,可(ke)以利用(yong)向量的減法來獲得船和水流的相(xiang)對速度。
假定(ding)船的速(su)度向量為:
\(\vec{v}_{船} = (8, 0) \quad (\text{向東 8 m/s})\)
水流速度向量為:
\(\vec{v}_{水} = (3, 1) \quad (\text{向(xiang)(xiang)東 3 m/s,向(xiang)(xiang)北 1 m/s})\)
那么船相對水流(liu)的速度向量為:
\(\vec{v}_{相對} = (8-3, 0-1) = (5, -1)\)
表(biao)示向(xiang)(xiang)東(dong) 5 m/s、向(xiang)(xiang)南 1 m/s。
三、向量內積
向量的內積又稱為點積(Dot Product),內積是兩個向量對應分量相乘后求和的一個標量值。
設定:
那么有:
從幾何意義上講(jiang),向量的內積(ji)還可以表示如下:
具體的(de)證明可(ke)以參考下圖,將(jiang)坐(zuo)標系進行旋(xuan)轉后,可(ke)完成推理:
其(qi)中 ?θ 表示兩個向(xiang)量的夾(jia)角(jiao),根據余弦定理可(ke)以(yi)得出:
- 假定模長不變,夾角越小,內積則越大
- 當夾角為90度時(兩個向量垂直),此時內積為0
- 內積的本質等同于向量的投影和模長的乘積
- 坐標旋轉時,內積保持不變
應用示例
我(wo)們在電商平臺上(shang)瀏覽產品(pin)(pin)詳情時(shi),經常(chang)會(hui)(hui)看到"相似產品(pin)(pin)"這樣的(de)頁簽,其中會(hui)(hui)給我(wo)們推(tui)薦相關的(de)產品(pin)(pin)。
這種商品推薦的場景便可以基于"余弦相似度"來實現,余弦相似度的核心是僅考慮向量的方向一致,忽略模長的影響。具體實現如下:
-
將商品(pin)信息(xi)特征化表述,包括(kuo):
- 類目
- 品牌
- 價格區間
- 顏色 / 尺寸 / 材質
- 商品標題/描述
- 圖片特征
-
特征向量歸一化
上述的(de)商品(pin)特征可以基于Embedding、CNN等(deng)算法來(lai)提取(qu)為(wei)特征值(zhi)。
這(zhe)些特征值(zhi)拼接后形成一(yi)個統一(yi)的商品(pin)向量,如下(xia):
\[\vec{g} = [x_{類目}, x_{品牌},x_{價格},x_{尺寸},x_{顏色},x_{圖譜特征}..] \]由于(yu)不同維度(du)的特(te)征值其模長無法統(tong)一,我們(men)需要將其進行歸(gui)一化(L2歸(gui)一):
對于其中的 \(x_k\),其歸一后的值為:
\[X_k = \frac{x_k}{\sqrt{x_1^2 + x_2^2 + \cdots + x_n^2}} \]L2歸一(yi)化使用歐幾里得(de)范數來計算,最(zui)終得(de)到特征向量為:
\[\vec{G} = [X_{類目}, X_{品牌},X_{價格},X_{尺寸},X_{顏色},X_{圖譜特征}..] \]歸一化(hua)后,∥G∥=1,余弦(xian)相似度就簡化(hua)成兩個單位向量的點積(ji),只(zhi)比較方向(特(te)征分布模式),消(xiao)除(chu)了特(te)征值(zhi)大小的影響。
-
計算商品特征(zheng)向(xiang)量的(de)相(xiang)(xiang)似度,獲得最相(xiang)(xiang)似的(de)N個商品
通(tong)過計算(suan)向量的(de)點積來比較相似度:$ simulaty = \vec{G} \cdot \vec{G2}$
向(xiang)(xiang)量點積在(zai)機器學習中常(chang)用(yong)于評估特(te)征的方向(xiang)(xiang)相似性
四、向量外積
向量的外積又稱為叉積(Cross Product),兩個向量的外積是一個同時垂直于兩者的向量。
設定:
那么有:
-
向量 \(\vec{c}\)的模長:$\vec{c} = ∣\vec{a}∣∣\vec{b}∣sin?θ $,在(zai)幾(ji)何(he)意義上等同(tong)與兩(liang)個(ge)向(xiang)量為(wei)邊的平行四邊形的面積。
-
向量 \(\vec{c}\)的方(fang)向:垂(chui)直于兩個向量構成(cheng)的平面。
如下圖所示:
向量 \(\vec{c}\)的方向除了垂直之外,還需要遵循右手螺旋定則,也就是對于 \(\vec{a} × \vec{b} = \vec{c}\) 來說,右手四指方向從 a 轉向 b,大拇指所指方向就是 c 的方向。所以, \(\vec{a} × \vec{b}\) 和 \(\vec{b} × \vec{a}\) 的(de)(de)結果是相反的(de)(de),即(ji)向量(liang)外(wai)積不滿足交換律。
從幾何(he)圖形上看,向(xiang)量(liang)的外積可以垂直于兩個向(xiang)量(liang)組成的平面(mian),當向(xiang)量(liang)平行(共線)時,向(xiang)量(liang)的外積為0。
需(xu)要(yao)注(zhu)意(yi)的(de)(de)是,向量的(de)(de)外(wai)積(ji)僅適(shi)用(yong)于(yu)三維(wei)圖形,在四(si)維(wei)及更(geng)高維(wei)空(kong)間中,垂直于(yu)兩(liang)個向量的(de)(de)方向不唯一,而是一個高維(wei)子空(kong)間,因此無法用(yong)一個單(dan)一向量來表示。
應用示例
物理學上,我(wo)們通過力矩(ju)(Torque)來(lai)描述一種"讓物體轉(zhuan)起(qi)來(lai)的能力"。
比如:
你(ni)用扳手擰螺(luo)絲,用力的(de)大小、角度和離(li)螺(luo)絲中心的(de)距離(li)都會影響(xiang)擰動的(de)效果。
同樣的(de)力,扳(ban)手(shou)越長(離中心越遠),越容易擰動(dong)——因為力矩更(geng)大。
力矩的公式如下:
-
r 是(shi)從(cong)旋(xuan)轉中心到施力點(dian)的位(wei)置向量
-
??:施加的作用力
力矩是(shi)向(xiang)量(liang) r 和向(xiang)量(liang) F的(de)外積向(xiang)量(liang):
-
力矩的(de)(de)方(fang)向(xiang):由右(you)手(shou)定則決(jue)定,表示(shi)旋轉軸的(de)(de)方(fang)向(xiang)
-
力矩的大小:等于 \(|\vec{r}| \cdot |\vec{F}| \cdot \sin\theta\),也(ye)就(jiu)是力度、垂直距離、和角度三(san)者(zhe)疊加的結果。
五、小試牛刀
下(xia)面使用 numpy 來實現(xian)本文(wen)提到的向量(liang)(liang)加(jia)減(jian)法、向量(liang)(liang)內(nei)積和(he)外積計算(suan)。
代碼示例
import numpy as np
# 定義兩個三維向量
a = np.array([3, 4, 0])
b = np.array([4, 0, 3])
# 1?? 向量加法
add = a + b
print("加法 a + b =", add)
# 2?? 向量減法
sub = a - b
print("減法 a - b =", sub)
# 3?? 向量內積(點積)
dot = np.dot(a, b)
print("內積 a · b =", dot)
# 4?? 特征歸一化(L2歸一)
a_norm = a / np.linalg.norm(a)
b_norm = b / np.linalg.norm(b)
print("歸一化后的 a =", a_norm)
print("歸一化后的 b =", b_norm)
# 5?? 歸一后的余弦相似度
cos_sim = np.dot(a_norm, b_norm)
print("歸一后的余弦相似度 =", cos_sim)
# 6?? 向量外積(叉積)
cross = np.cross(a, b)
print("外積 a × b =", cross)
執行上述程序(xu),輸出結果如下:
加法 a + b = [7 4 3]
減法 a - b = [-1 4 -3]
內積 a · b = 12
歸一化后的 a = [0.6 0.8 0. ]
歸一化后的 b = [0.8 0. 0.6]
歸一后的余弦相似度 = 0.48
外積 a × b = [ 12 -9 -16]
六、小結
向(xiang)量(liang)(liang)的(de)概念早在(zai)中學(xue)數學(xue)、物理(li)學(xue)中就已(yi)經(jing)能接觸到了(le)(le),理(li)解向(xiang)量(liang)(liang)和(he)空間(jian)幾何的(de)結合(he)非常(chang)重要。從最簡單的(de)加(jia)減法(fa)就能體會到基(ji)本相對(dui)量(liang)(liang)的(de)價值;向(xiang)量(liang)(liang)內積(ji)更是各種(zhong)推(tui)薦算法(fa)、特征(zheng)相似度計算的(de)基(ji)礎(chu)范(fan)式,向(xiang)量(liang)(liang)外積(ji)在(zai)機(ji)械工程學(xue)中大(da)行其道等等,這些無一證明了(le)(le)向(xiang)量(liang)(liang)在(zai)現實的(de)數學(xue)應用中的(de)重要地位。
作者: 美碼師(zale)
出處: //www.xtjzw.net/littleatp/, 如果喜歡我的文章,請關注我的公眾號
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出 原文鏈接 如有問(wen)題, 可留言(yan)咨(zi)詢.