亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

numpy矩陣乘法中的multiply,matmul和dot的使用

 更新時(shí)間:2023年02月15日 09:52:29   作者:木盞  
本文主要介紹了numpy矩陣乘法中的multiply,matmul和dot的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

用numpy做矩陣運(yùn)算時(shí),少不了用到矩陣乘法。本文幫你迅速區(qū)分multiply, matmul和dot的區(qū)別。

numpy官方文檔中的說明:(想深入了解可以一戳)

multiplyhttps://docs.scipy.org/doc/numpy/reference/generated/numpy.multiply.html

dothttps://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html

matmul:https://docs.scipy.org/doc/numpy/reference/generated/numpy.matmul.html

1. multiply(矩陣點(diǎn)乘)

先說說更簡(jiǎn)單的multiply,如果兩個(gè)維度完全一樣的矩陣用multiply做乘法,那么它們只是進(jìn)行對(duì)應(yīng)位置元素之間的乘法,得到一個(gè)同樣維度的矩陣輸出。這就是所謂的element-wise product。

import numpy as np
a = np.array([[0,1,2], [1,2,3], [3,4,5]])
b = np.array([[1,1,2], [2,2,1], [1,1,2]])
print(np.multiply(a, b))

輸出:

array([[ 0, 1, 4], [ 2, 4, 3], [ 3, 4, 10]])

看這個(gè)栗子,應(yīng)該十分好理解multiply。但是,如果你認(rèn)為multiply只能對(duì)同樣維度的矩陣之間相乘,那你就 t/o-o\ simple了。

如果3x3的矩陣和3x1的矩陣用multiply相乘會(huì)怎樣呢?繼續(xù)看栗子:

import numpy as np
a = np.array([[0, 1, 2], [1, 2, 3], [3, 4, 5]])
b = np.array([1, 2, 3])
print(np.multiply(a, b))

輸出:

array([[ 0,  2,  6],
       [ 1,  4,  9],
       [ 3,  8, 15]])

相當(dāng)于用b依次乘以a的每一行。記住,multiply是滿足交換律的。(a和b互換位置結(jié)果不變)

對(duì)于3x3的矩陣a,可以用3x1的矩陣與它相乘,也可以用1x3的矩陣與它相乘。還可以用它乘以一個(gè)常數(shù):

import numpy as np
a = np.array([[0, 1, 2], [1, 2, 3], [3, 4, 5]])
print(np.multiply(a, 3))

相當(dāng)于a中各個(gè)元素乘以3。

2. dot(矩陣叉乘)

dot就是矩陣叉乘,MxN矩陣乘以NxC矩陣會(huì)得到一個(gè)MxC的矩陣。對(duì)于2D情況下的dot,等同于matmul,也等同于運(yùn)算符@。

用一張圖很好解釋:

>>> a = [[1, 0], [0, 1]]
>>> b = [[4, 1], [2, 2]]
>>> np.dot(a, b)
array([[4, 1],
       [2, 2]])
>>> a@b
array([[4, 1],
       [2, 2]])

3. matmul

matmul不支持標(biāo)量乘法,在2D矩陣乘法中,其效果與dot一樣。

在N維矩陣乘法中(N>=3),體現(xiàn)出與dot不一樣的算法。

>>> a = np.ones([9, 5, 7, 4])
>>> c = np.ones([9, 5, 4, 3])
>>> np.dot(a, c).shape
(9, 5, 7, 9, 5, 3)
>>> np.matmul(a, c).shape
(9, 5, 7, 3)
>>> # n is 7, k is 4, m is 3

總結(jié)

1. dot和multiply對(duì)于標(biāo)量相乘,效果一樣,而matmul不支持標(biāo)量相乘:

>>>dot(3,3)
>>>9
>>>multiply(3,3)
>>>9
>>>matmul(3,3)
error!

2. 對(duì)于2D矩陣相乘,dot和matmul效果一樣, 并且這倆都不滿足交換律。通常建議優(yōu)先使用matmul:

from numpy import *
a = arange(9).reshape(3,3)
b = arange(3).reshape(1,3)
 
print(dot(b,a))
print(matmul(b,a))

輸出:

[[15 18 21]]
[[15 18 21]]

到此這篇關(guān)于numpy矩陣乘法中的multiply,matmul和dot的使用的文章就介紹到這了,更多相關(guān)numpy矩陣乘法中的multiply,matmul和dot內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論