Python 的NumPy 庫中dot()函數詳解


Python的NumPy庫中dot()函數詳解

本人在學習Python數據分析時的線性代數運算章節中,遇到矩陣乘法的dot函數的用法一時難於理解,后來,經查閱其他博主的相關資料,總結詳解如下

1、NumPy庫中dot()函數語法定義:

import numpy as np
np.dot(a, b, out=None)  #該函數的作用是獲取兩個元素a,b的乘積.

2、前面講過數組的運算是元素級的,數組相乘的結果是各對應元素的積組成的數組,而對於矩陣而言,需要求的是點積,這里NumPy庫提供了用於矩陣乘法的dot函數。在jupyter notebook中執行的代碼運算如下:

#dot函數的詳解
import numpy as np
np.dot(5,8)
#如果arr1和arr都是一維數組,那么它返回的就是向量的內積。
arr1 = np.array([2,3])
arr1
array([2, 3])
arr2 = np.array([4,5])
arr2
array([4, 5])
np.dot(arr1,arr2)
arr3 = np.array([2,3,4])
arr3
array([2, 3, 4])
arr4 = np.array([5,6,7])
arr4
array([5, 6, 7])
np.dot(arr3,arr4)
#如果arr5和arr6都是二維數組,那么它返回的是矩陣乘法。 
arr5 = np.array([[2,3],[4,5]])
arr5
array([[2, 3],
       [4, 5]])
arr6 = np.array([[6,7],[8,9]])
arr6
array([[6, 7],
       [8, 9]])
np.dot(arr5,arr6)
array([[36, 41],
       [64, 73]])
arr7 = np.array([[2,3,4],[5,6,7]])
arr7
array([[2, 3, 4],
       [5, 6, 7]])
arr8 = np.arange(9).reshape(3,3)
arr8
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
np.dot(arr7,arr8)
array([[33, 42, 51],
       [60, 78, 96]])
arr9 = np.arange(6).reshape(3,2)
arr9
array([[0, 1],
       [2, 3],
       [4, 5]])
np.dot(arr7,arr9)
array([[22, 31],
       [40, 58]])
np.dot(arr8,arr9)
array([[10, 13],
       [28, 40],
       [46, 67]])
arr10 = np.arange(6).reshape(2,3)
arr10
array([[0, 1, 2],
       [3, 4, 5]])
arr11 = np.arange(9).reshape(3,3)
arr11
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
np.dot(arr10,arr11)
array([[15, 18, 21],
       [42, 54, 66]])
arr12 = np.arange(12).reshape(4,3)
arr12
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
arr13 = np.arange(9).reshape(3,3)
arr13
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
np.dot(arr12,arr13)
array([[ 15,  18,  21],
       [ 42,  54,  66],
       [ 69,  90, 111],
       [ 96, 126, 156]])
arr14 = np.arange(15).reshape(3,5)
arr14
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
np.dot(arr12,arr14) 
array([[ 25,  28,  31,  34,  37],
       [ 70,  82,  94, 106, 118],
       [115, 136, 157, 178, 199],
       [160, 190, 220, 250, 280]])
dot函數的運算總代碼顯示如下

 3、這樣的多維數組矩陣運算,通過Python代碼來實現倒是挺方便的,但是,通過我們人眼看起來,對於剛入門的朋友來說,可能會很吃力,或者不清楚該結果是怎么實現的,接下來,我給大家一一介紹一下運算過程。

4、如下單個數的dot函數運算所示:

np.dot(5,8)
40

5、如下一維數組的dot函數運算所示:

 

#如果arr1和arr都是一維數組,那么它返回的就是向量的內積。
arr1 = np.array([2,3])
arr1
array([2, 3])
arr2 = np.array([4,5])
arr2
array([4, 5])
np.dot(arr1,arr2)
23
arr3 = np.array([2,3,4])
arr3
array([2, 3, 4])
arr4 = np.array([5,6,7])
arr4
array([5, 6, 7])
np.dot(arr3,arr4)
56
一維數組的代碼案例如下

利用表格計算法來解釋上面的一維數組乘積的結果計算過程如下表1,表2,所示:

        

          表 1                                         表 2

通過上表中的計算過程顯示,是不是很快就能清楚,矩陣之間的運算。從而快速了解運算結果的由來。

6、如下二維數組的dot函數運算所示:

二維數組矩陣之間的dot函數運算得到的乘積是矩陣乘積

#如果arr5和arr6都是二維數組,那么它返回的是矩陣乘法。 
arr5 = np.array([[2,3],[4,5]])
arr5
array([[2, 3],
       [4, 5]])
arr6 = np.array([[6,7],[8,9]])
arr6
array([[6, 7],
       [8, 9]])
np.dot(arr5,arr6)
array([[36, 41],
       [64, 73]])
二維數組的代碼案例如下

利用表格計算法來解釋上面的,二維數組乘積的結果計算過程如下表3,所示:

                表 3

7、如下二維數組與三維數組的dot函數運算:

#arr7二維數組與arr8三維數組的dot函數矩陣運算
arr7 = np.array([[2,3,4],[5,6,7]])
arr7
array([[2, 3, 4],
       [5, 6, 7]])
arr8 = np.arange(9).reshape(3,3)
arr8
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
np.dot(arr7,arr8)
array([[33, 42, 51],
       [60, 78, 96]])
arr9 = np.arange(6).reshape(3,2)
arr9
array([[0, 1],
       [2, 3],
       [4, 5]])
np.dot(arr7,arr9)
array([[22, 31],
       [40, 58]])
二維數組與三維數組的運算案例代碼如下

 利用表格計算法來解釋上面的,二維數組與三維數組的矩陣乘積的結果計算過程如下表4,所示:

                      表 4

8、如下多維數組的dot函數運算所示:

 

#多維數組的dot函數矩陣運算
arr12 = np.arange(12).reshape(4,3)
arr12
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
arr13 = np.arange(9).reshape(3,3)
arr13
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
np.dot(arr12,arr13)
array([[ 15,  18,  21],
       [ 42,  54,  66],
       [ 69,  90, 111],
       [ 96, 126, 156]])
arr14 = np.arange(15).reshape(3,5)
arr14
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
np.dot(arr12,arr14) 
array([[ 25,  28,  31,  34,  37],
       [ 70,  82,  94, 106, 118],
       [115, 136, 157, 178, 199],
       [160, 190, 220, 250, 280]])
多維數組的代碼運算如下

 利用表格計算法來解釋上面的,多維數組的矩陣乘積的結果計算過程如下表5,表6,表7所示: 

   

                  表 5                                        表 6

                        

                                      表 7 

9、dot()函數可以通過NumPy庫調用,也可以由數組實例對象進行調用。例如:a.dot(b) 與 np.dot(a,b)效果相同。但矩陣積計算不遵循交換律,np.dot(a,b) 和 np.dot(b,a) 得到的結果是不一樣的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM