我無法理解 NumPy 如何計算兩個二維矩陣的內積。
例如,這個程式:
mat = [[1, 2, 3, 4],
[5, 6, 7, 8]]
result = np.inner(mat, mat)
print('\n' 'result: ')
print(result)
print('')
產生這個輸出:
result:
[[ 30 70]
[ 70 174]]
這些數字是如何計算的??
在有人說“閱讀檔案”之前我做了,https://numpy.org/doc/stable/reference/generated/numpy.inner.html,我不清楚這個結果是如何計算的。
在有人說“檢查維基百科文章”之前,我做了,https://en.wikipedia.org/wiki/Frobenius_inner_product顯示了我不熟悉的各種數學符號,并且沒有解釋如何執行上述計算。
在有人說“谷歌它”之前,我做了,大多數例子都是針對一維陣列(這是一個簡單的計算),而其他人喜歡這個視頻https://www.youtube.com/watch?v=_YtHyjcQ1gw產生不同的結果比 NumPy 好。
任何澄清將不勝感激。
uj5u.com熱心網友回復:
In [55]: mat = [[1, 2, 3, 4],
...: [5, 6, 7, 8]]
...:
In [56]: arr = np.array(mat)
In [58]: arr.dot(arr.T)
Out[58]:
array([[ 30, 70],
[ 70, 174]])
這是 (2,4) 與 (4,2) 的矩陣乘積,結果為 (2,2)。這是通常的“跨列掃描,向下掃描行”方法。
執行此操作的其他幾個運算式:
我喜歡 的表現力einsum,其中乘積和在j維度上:
In [60]: np.einsum('ij,kj->ik',arr,arr)
Out[60]:
array([[ 30, 70],
[ 70, 174]])
使用廣播元素乘法和求和:
In [61]: (arr[:,None,:]*arr[None,:,:]).sum(axis=-1)
Out[61]:
array([[ 30, 70],
[ 70, 174]])
沒有sum,產品是:
In [62]: (arr[:,None,:]*arr[None,:,:])
Out[62]:
array([[[ 1, 4, 9, 16],
[ 5, 12, 21, 32]],
[[ 5, 12, 21, 32],
[25, 36, 49, 64]]])
您發現了哪些值。
uj5u.com熱心網友回復:
我終于找到了這個網站https://www.tutorialspoint.com/numpy/numpy_inner.htm它更好地解釋了事情。以上計算如下:
(1*1) (2*2) (3*3) (4*4) (1*5) (2*6) (3*7) (4*8)
1 4 9 16 5 12 21 32
= 30 = 70
(5*1) (6*2) (7*3) (8*4) (5*5) (6*6) (7*7) (8*8)
5 12 21 32 25 36 49 64
= 70 = 174
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/398143.html
標籤:麻木的
