向量和矩陣的點乘和叉乘

向量


定義:向量是由N個實數組成的一行N列或N行一列的的數組。

  • 點乘:又叫做點積、內積、數量積、標量積,向量a[a1,a2,...,an]和向量b[b1,b2b...,bn]點乘的結果是一個標量,記作a.b

幾何解釋:a.b = |a| |b| cos \theta,故而點乘可以計算出兩個向量的夾角,且向量垂直,點乘結果爲零。

  • 叉乘:又叫向量積、外積、叉積,叉乘,向量a[x1,y1,z1]和向量b[x2,y2,z2]叉乘的運算結果是一個向量,並且兩個向量的叉積與這兩個向量組成的座標平面垂直,記作axb

計算方式:利用行列式方式,設i[1,0,0],j[0,1,0],k[0,0,1],則如下圖:

幾何解釋:axb =  |a| |b| sin \Theta,故兩個向量平行,則其叉乘等於零。

幾何意義:叉積的長度|a×b|可以解釋成這兩個叉乘向量ab共起點時,所構成平行四邊形的面積。

Numpy實現向量的點乘和叉乘

點乘需要用到numpy庫的dot函數,得到一個標量。叉乘需要用到numpy庫的cross函數。

In [1]: import numpu as np   
In [2]: a = np.array([1,2,3]) 
In [3]: b = np.array([2,2,3])   
In [4]: np.dot(a,b)  
Out[4]: 15
In [5]: np.cross(a,b)                                                                                                                                            
Out[5]: array([ 0,  3, -2])

矩陣直接使用*相乘的處理方式是向量對應位置相乘,維數不變,它與np.multiply函數效果一樣,均是元素相乘。

In [6]: a*b               
Out[6]: array([2, 4, 9])
In [7]: np.multiply(a,b)                                                                
Out[7]: array([2, 4, 9])

矩陣


定義:是一個按照長方陣列排列的複數實數集合。

  • 矩陣點乘:是矩陣各個對應元素相乘, 這個時候要求兩個矩陣必須同樣大小。
  • 矩陣叉乘:矩陣的乘法就是矩陣a的第m行乘以矩陣b的第n列,各個元素對應相乘然後求和作爲第m行n列元素的值。

Numpy實現矩陣的點乘和叉乘

矩陣的點乘直接使用*號即可,也可以使用 numpy庫的multiply函數,叉乘使用dot函數,這與向量相反

In [1]: a = np.array([[1,2],[3,4]])                 
In [2]: b = np.array([[5,6],[7,8]]) 
In [3]: a*b                                                                                
Out[3]: 
array([[ 5, 12],
       [21, 32]])
In [4]: np.dot(a,b)                                                
Out[4]: 
array([[19, 22],
       [43, 50]])
In [34]: np.multiply(a,b)                                                                                                                                         
Out[34]: 
array([[ 5, 12],
       [21, 32]])

總結Numpy庫


numpy庫的對象有數組和矩陣,兩者看起來長得差不多,但在性質、運算上有很大不同。可通過array函數mat函數相互轉化。

  • dot函數

對於秩爲1的數組,執行對應位置相乘,然後再相加,等價於向量的點乘

對於秩不爲1的二維數組,執行矩陣乘法運算,等價於矩陣的叉乘

  • multiply函數

數組和矩陣對應位置相乘,輸出與相乘數組/矩陣的大小一致,效果上與運算符*對數組效果一樣。

  • 運算符*號

對數組執行對應位置相乘,等價於multiply函數

對矩陣執行矩陣乘法運算,等價於dot函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章