向量
定義:向量是由N個實數組成的一行N列或N行一列的的數組。
- 點乘:又叫做點積、內積、數量積、標量積,向量a[a1,a2,...,an]和向量b[b1,b2b...,bn]點乘的結果是一個標量,記作a.b;
幾何解釋:a.b = |a| |b| ,故而點乘可以計算出兩個向量的夾角,且向量垂直,點乘結果爲零。
- 叉乘:又叫向量積、外積、叉積,叉乘,向量a[x1,y1,z1]和向量b[x2,y2,z2]叉乘的運算結果是一個向量,並且兩個向量的叉積與這兩個向量組成的座標平面垂直,記作axb;
計算方式:利用行列式方式,設i[1,0,0],j[0,1,0],k[0,0,1],則如下圖:
幾何解釋:axb = |a| |b| ,故兩個向量平行,則其叉乘等於零。
幾何意義:叉積的長度|a×b|可以解釋成這兩個叉乘向量a,b共起點時,所構成平行四邊形的面積。
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函數;