1. 程式人生 > >numpy 矩陣積(點積)

numpy 矩陣積(點積)

 

對NumPy中dot()函式的理解

今天學習到numpy基本的運算方法,遇到了一個讓我比較難理解的問題。就是dot函式是如何對矩陣進行運算的。

一、dot()的使用

參考文件:https://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html

dot()返回的是兩個陣列的點積(dot product)

1.如果處理的是一維陣列,則得到的是兩陣列的內積(順便去補一下數學知識)

複製程式碼

In : d = np.arange(0,9)
Out: array([0, 1, 2, 3, 4, 5, 6, 7, 8])
In : e = d[::-1]
Out: array([8, 7, 6, 5, 4, 3, 2, 1, 0])

In : np.dot(d,e) 
Out: 84

複製程式碼

2.如果是二維陣列(矩陣)之間的運算,則得到的是矩陣積(mastrix product)。

複製程式碼

In : a = np.arange(1,5).reshape(2,2)
Out:
array([[1, 2],
       [3, 4]])

In : b = np.arange(5,9).reshape(2,2)
Out: array([[5, 6],
            [7, 8]])

In : np.dot(a,b)
Out:
array([[19, 22],
       [43, 50]])

複製程式碼

所得到的陣列中的每個元素為,第一個矩陣中與該元素行號相同的元素與第二個矩陣與該元素列號相同的元素,兩兩相乘後再求和。

這句話有點難理解,但是這句話裡面沒有哪個字是多餘的。結合下圖理解這句話。

3.dot()函式可以通過numpy庫呼叫,也可以由陣列例項物件進行呼叫。a.dot(b) 與 np.dot(a,b)效果相同。

矩陣積計算不遵循交換律,np.dot(a,b) 和 np.dot(b,a) 得到的結果是不一樣的。