點積(dot)運算及簡單應(yīng)用

寫在最前面

1.本文將盡量簡明直觀的介紹點積運算斥赋,及其在python中的簡單應(yīng)用倘是。對點積運算的理解將對機器學(xué)習(xí)的算法編寫提供相當(dāng)大的幫助黄虱。
2.本文代碼使用python及numpy科學(xué)算法庫進(jìn)行編寫。
3.很重要的一點是:向量A與向量B的點積 并不等于 向量B與向量A的點積白热,我們用A·B表示兩個向量的點積運算敛助,則A·B!=B·A(或者你習(xí)慣于A·B<>B·A的表述)。

一維相量的點積運算

若A 和 B 均為一維向量屋确,且均包含有n個元素纳击,則A與B的點積為:
A[0]B[0]+A[1]B[1]+...+A[n]*B[n]续扔。

# A 和 B 均為一維向量,且均包含有n個元素焕数,則A與B的點積為:
# A[0]*B[0]+A[1]*B[1]+...+A[n]*B[n]纱昧。
# 即下標(biāo)相同的元素的乘積之和。沒錯堡赔,出來的是一個數(shù)字砌些。
# 舉個例子
A=[1,2,3,4,5]
B=[5,4,3,2,1]
print('A與B的點積為:',np.dot(A,B))  #此處np.dot(A,B)就是求A與B的點積運算
#輸出>A與B的點積為: 35

上例中,35=1*5+2*4+3*3+4*2+5*1=5+8+9+8+5
如果你認(rèn)為這很簡單加匈,那么有沒有想過二維向量的點積會如何呢存璃?
哦,對了雕拼,提一句纵东。一般我們使用大寫字母表示向量,小寫字母表示具體的某一項啥寇。不出意外的話偎球,是國際通用的。

二維向量的點積運算

二維數(shù)組的點積相對復(fù)雜一些辑甜。
先來個簡單的例子解釋一下:
我們還是假設(shè)有A衰絮,B兩個向量。如果A磷醋,B都是(2,2)向量猫牡,那么A和B的點積將會組成一個新的向量,我們叫做C邓线。
猜猜C會長什么樣子呢淌友?C將是(2,2)向量。先來看例子骇陈,再來解釋震庭。

A = [[1, 2],[3,7]]
B = [[4, 3],[5, 0]]
print('A與B的點積為:\n',np.dot(A,B))
#輸出>a與b的點積為:
 [[14  3]
  [47  9]]

這個結(jié)果是如何出來的呢?請原諒我沒有手寫板你雌,直接在紙上畫了器联。


A·B

或許你已經(jīng)看出規(guī)律:

1.A的第一行與B的第一列,對應(yīng)元素的乘積之和婿崭,構(gòu)成了新向量C的第一行第一列拨拓,坐標(biāo)為(0,0)的元素。
2.A的第一行與B的第二列逛球,對應(yīng)元素的乘積之和千元,構(gòu)成了新向量C的第一行第二列苫昌,坐標(biāo)為(0,1)的元素颤绕。
3.A的第二行與B的第一列幸海,對應(yīng)元素的乘積之和,構(gòu)成了新向量C的第二行第一列奥务,坐標(biāo)為(1,0)的元素物独。
總結(jié)來看,新向量元素的坐標(biāo)氯葬,y值取決于A向量所處的行挡篓,x值取決于B向量所處的列。而每個元素的計算帚称,總是A的行元素與B的列元素的點積官研。

所以,如果兩個二維向量想實現(xiàn)點積運算闯睹,是需要有一定條件的戏羽。條件是什么呢?

假如要計算 A·B楼吃,那么始花,A(點擊號前面的向量)中x方向元素的數(shù)量應(yīng)該于B(點積號后面的向量)中y方向的數(shù)量相同。

關(guān)于我在文章中對向量的標(biāo)識孩锡,這里需要稍微提一下酷宵。如果A為(3,2)向量,則代表A在y方向有3個元素躬窜,在x方向有兩個元素浇垦,就像下圖那樣。


A的坐標(biāo)表示

是不是比手寫的漂亮了很多荣挨?恩恩溜族,是的。
接下來垦沉,我們將對上面提出的兩個向量點積的前提條件煌抒,做個實例。

A=np.array([1,2,3,4]).reshape(4,1)
B=np.array([1,2,3,4,5,6,7,8]).reshape(2,4)
print('A與B的點積為:\n',np.dot(A,B))
#>報錯:shapes (4,1) and (2,4) not aligned: 1 (dim 1) != 2 (dim 0)

上面的代碼中厕倍,我們將A聲明為(4,1)向量寡壮,將B聲明為(2,4)向量。A和B的具體形式為:

A:[ [1]
    [2]
    [3]
    [4] ]
B:[ [1 2 3 4]
    [5 6 7 8] ]

當(dāng)我們執(zhí)行點積運算時讹弯,報錯了况既,因為A的x方向為1個元素,而b的y方向為2個元素组民。無法進(jìn)行點積運算棒仍。 如果我們稍作修改,將A和B的位置顛倒臭胜,事情將大不相同莫其。如下:

A=np.array([1,2,3,4]).reshape(4,1)
B=np.array([1,2,3,4,5,6,7,8]).reshape(2,4)
print("A\n",A)
print("B\n",B)
print('B與A的點積為:\n',np.dot(B,A))
#>輸出:
A:[ [1]
    [2]
    [3]
    [4] ]
B:[ [1 2 3 4]
    [5 6 7 8] ]
B與A的點積為:
 [ [30]
   [70] ]

B與A的值均未變癞尚,我們只是更換了A與B的位置,B·A中乱陡,B的x方向有4個元素浇揩,A的y方向有四個元素。最終的結(jié)果憨颠,C在y方向上跟隨B胳徽,有兩個元素;在x方向上跟隨A爽彤,有一個元素养盗。C:(2,1)。

這有什么用

點擊運算是向量運算中的一種适篙,在程序中使用向量運算爪瓜,可以大大提升執(zhí)行效率。就點積運算而言匙瘪,對于機器學(xué)習(xí)的算法編寫铆铆,是大有幫助的。接下來我們將做一個簡單的介紹丹喻,如果你并沒有接觸機器學(xué)習(xí)薄货,依然可以看一下,這個例子并不復(fù)雜碍论。
而關(guān)于機器學(xué)習(xí)谅猾,后期會有一系列文章。
在下面例子中鳍悠,你只需要知道它是機器(深度)學(xué)習(xí)中的一部分就可以了税娜,無需考慮太多關(guān)于機器學(xué)習(xí)的內(nèi)容。

現(xiàn)在我們有兩組數(shù)據(jù)藏研,用L1和L2表示敬矩,L1,1表示第一組元素的第一個數(shù),L2,3表示第二組元素的第三個數(shù)蠢挡。

L1-L2關(guān)系

用L2,1舉例弧岳,我們要求L2,2=w2,1×L1,1+w2,2×L1,2
其中 wx,y表示L2中,第x個元素對應(yīng)于L1中第y個元素所特有的參數(shù)业踏。上圖L1和L2構(gòu)成了一個2×3的網(wǎng)絡(luò)禽炬。則L2中對應(yīng)的w的總數(shù)量應(yīng)該為2×3=6個。
要實現(xiàn)一個等式計算出所有L2中三個元素最終的值勤家,我們就用到了點積腹尖。如下:

1.向量A1表示L1中兩個元素的輸出值,則A1:(2,1)
2.向量W表示L2中所有的w伐脖,則W:(3,2)热幔。L2中總共三個元素乐设,每個元素對應(yīng)2個w值。
3.用展開的方式書寫:
L2,1=w1,1×A11,1+w1,2×A11,2
L2,2=w2,1×A11,1+w2,2×A11,2
L2,3=w3,1×A11,1+w3,2×A11,2
最終構(gòu)成的L2 我們用向量A2表示断凶,則A2:(3,1)伤提。

所以巫俺,有沒有想到上面我們提到的點積认烁?用點積表示:A2=W·A1
在程序里試一下:

A1=np.array([1,2]).reshape(2,1)
W=np.array([1,2,3,4,5,6]).reshape(3,2)
print('A2=W·A1:\n',np.dot(W,A1))
#>輸出:
A2=W·A1:
 [ [ 5]
   [11]
   [17] ]

如果不用點積,你要寫多少代碼呢介汹?更重要的是却嗡,點積節(jié)約了大量運算的時間。

轉(zhuǎn)發(fā)請注明出處嘹承!
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窗价,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子叹卷,更是在濱河造成了極大的恐慌撼港,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骤竹,死亡現(xiàn)場離奇詭異帝牡,居然都是意外死亡,警方通過查閱死者的電腦和手機蒙揣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門靶溜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人懒震,你說我怎么就攤上這事罩息。” “怎么了个扰?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵瓷炮,是天一觀的道長。 經(jīng)常有香客問我递宅,道長崭别,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任恐锣,我火速辦了婚禮茅主,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘土榴。我一直安慰自己诀姚,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布玷禽。 她就那樣靜靜地躺著赫段,像睡著了一般呀打。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上糯笙,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天贬丛,我揣著相機與錄音,去河邊找鬼给涕。 笑死豺憔,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的够庙。 我是一名探鬼主播恭应,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼耘眨!你這毒婦竟也來了昼榛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤剔难,失蹤者是張志新(化名)和其女友劉穎胆屿,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偶宫,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡非迹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了读宙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彻秆。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖结闸,靈堂內(nèi)的尸體忽然破棺而出唇兑,到底是詐尸還是另有隱情,我是刑警寧澤桦锄,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布扎附,位于F島的核電站,受9級特大地震影響结耀,放射性物質(zhì)發(fā)生泄漏留夜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一图甜、第九天 我趴在偏房一處隱蔽的房頂上張望碍粥。 院中可真熱鬧,春花似錦黑毅、人聲如沸嚼摩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽枕面。三九已至愿卒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間潮秘,已是汗流浹背琼开。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留枕荞,地道東北人柜候。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像买猖,于是被迫代替她去往敵國和親改橘。 傳聞我的和親對象是個殘疾皇子滋尉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容