Numpy中np.dot與np.matmul的區(qū)別詳解
作用相同的情況
在若兩個array的維度均為兩維的情況下,兩個函數(shù)的結(jié)果是相同的,例如:
a = np.array([i for i in range(6)]).reshape([2,3]) b = np.array([i for i in range(6)]).reshape([3,2]) """ a [[0 1 2] [3 4 5]] b [[0 1] [2 3] [4 5]] """
>>> np.dot(a,b) array([[10, 13], [28, 40]]) >>> np.matmul(a,b) array([[10, 13], [28, 40]])
作用不同的情況
在三維的情況下,假設(shè)
a = np.array([i for i in range(12)]).reshape([2,2,3]) b = np.array([i for i in range(12)]).reshape([2,3,2]) """ a [[[ 0 ?1 ?2] ? [ 3 ?4 ?5]] ?[[ 6 ?7 ?8] ? [ 9 10 11]]] b [[[ 0 ?1] ? [ 2 ?3] ? [ 4 ?5]] ?[[ 6 ?7] ? [ 8 ?9] ? [10 11]]] """
>>> np.matmul(a,b) array([[[ 10, ?13], ? ? ? ? [ 28, ?40]], ? ? ? ?[[172, 193], ? ? ? ? [244, 274]]]) >>> np.matmul(a,b).shape (2, 2, 2)
這是因為matmul將最后兩維作為矩陣的兩維,相當(dāng)于有2個2 ∗ 2 2*22∗2的矩陣,因此通過對應(yīng)位置矩陣進行矩陣乘法,會得到2個2 ∗ 2 2*22∗2的結(jié)果
>>> np.dot(a,b) array([[[[ 10, ?13], ? ? ? ? ?[ 28, ?31]], ? ? ? ? [[ 28, ?40], ? ? ? ? ?[100, 112]]], ? ? ? ?[[[ 46, ?67], ? ? ? ? ?[172, 193]], ? ? ? ? [[ 64, ?94], ? ? ? ? ?[244, 274]]]]) >>> np.dot(a,b).shape (2, 2, 2, 2)
可以看到其結(jié)果與matmul不同并且結(jié)果是四維的,這是因為dot將a數(shù)組的最后一維作為向量,并將b數(shù)組的倒數(shù)第二維作為了另一個向量,因此a中可以看成有2 ∗ 2 2*22∗2個向量,b中有2 ∗ 2 2*22∗2個向量,dot會將a的向量與b的向量全部組合在一起,因此會有( 2 ∗ 2 ) ∗ ( 2 ∗ 2 ) (2*2)*(2*2)(2∗2)∗(2∗2)種結(jié)果。
到此這篇關(guān)于Numpy中np.dot與np.matmul的區(qū)別詳解的文章就介紹到這了,更多相關(guān)Numpy np.dot與np.matmul內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
對pandas讀取中文unicode的csv和添加行標(biāo)題的方法詳解
今天小編就為大家分享一篇對pandas讀取中文unicode的csv和添加行標(biāo)題的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12在pandas多重索引multiIndex中選定指定索引的行方法
今天小編就為大家分享一篇在pandas多重索引multiIndex中選定指定索引的行方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11Python實現(xiàn)識別手寫數(shù)字 Python圖片讀入與處理
這篇文章主要為大家詳細(xì)介紹了Python實現(xiàn)識別手寫數(shù)字,Python圖片的讀入與處理,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01