關(guān)于Python中兩個(gè)不同shape的數(shù)組間運(yùn)算規(guī)則
1 數(shù)組間運(yùn)算
聲明:本博客討論的數(shù)組間運(yùn)算是指四則運(yùn)算,如:a+b、a-b、a*b、a/b,不包括 a.dot(b) 等運(yùn)算,由于 numpy 和 tensorflow 中都遵循相同的規(guī)則,本博客以 numpy 為例。
眾所周知,相同 shape 的兩個(gè)數(shù)組間運(yùn)算是指兩個(gè)數(shù)組的對(duì)應(yīng)元素相加。我們經(jīng)常會(huì)碰到一些不同 shape 的數(shù)組間運(yùn)算。
那么,任何兩個(gè)不同 shape 的數(shù)組都能運(yùn)算么?又遵循什么樣的運(yùn)算規(guī)則?
shape 與維數(shù):
如 a:[1,2,3],則 shape=(3, ),維數(shù)為1;b:[[1,2,3],[4,5,6]],則shape=(2,3),維數(shù)為2
運(yùn)算條件:
設(shè)a為低維數(shù)組,b為高維數(shù)組,則a和b能運(yùn)算的充分條件是:a.shape[-1]=b.shape[-1]、a.shape[-2]= b.shape[-2]、...(a可以作為b的一個(gè)元素),或者 a.shape=(m,1)(或a.shape=(m, )) 且b.shape=(1,n) (a為行向量,b為列向量)
運(yùn)算規(guī)則:
- 當(dāng)a為數(shù)字時(shí),將a與b的每個(gè)元素運(yùn)算,運(yùn)算后的 shape 與b相同當(dāng)
- a可以作為b的一個(gè)元素,將a與b中每個(gè)相同 shape 的子元素運(yùn)算,運(yùn)算后的 shape 與b相同
- 當(dāng)a為行向量b為列向量時(shí),將a中每個(gè)元素與b中每個(gè)元素分別運(yùn)算,運(yùn)算后的 shape=(a.shape[1], b.shape[0])
如需改變數(shù)組 shape,可調(diào)用 reshape() 函數(shù),如下:
a=np.array([[1,1],[2,2],[3,3]]) b=a.reshape([-1,1]) #a.shape=(3,2),b.shape=(6,1)
2 實(shí)驗(yàn)
數(shù)組與數(shù)字之間的運(yùn)算
a=np.array([1,1,1])
b=np.array([[1,1,1],[2,2,2]])
c=a+1
d=b+1
print("c=a+1\n",c)
print("d=b+1\n",d)輸出
c=a+1
[2 2 2]
d=b+1
[[2 2 2]
[3 3 3]]
補(bǔ)充:shape=(1, ) 的數(shù)組可以與任意 shape 的數(shù)組運(yùn)算,運(yùn)算規(guī)則同數(shù)字與數(shù)組的運(yùn)算。
行向量與列向量之間的運(yùn)算
a=np.array([[1,2,3]]) #或 a=np.array([1,2,3])
b=np.array([[1],[2],[3],[4],[5]])
c=a+b
print("c=a+b",c)輸出
c=a+b
[[2 3 4]
[3 4 5]
[4 5 6]
[5 6 7]
[6 7 8]]
1維數(shù)組與高維數(shù)組之間的運(yùn)算
a=np.array([1,1,1])
b=np.array([[1,1,1],[2,2,2]])
c=np.array([[1,1,1],[2,2,2],[3,3,3]])
d=a+b
e=a+c
print("d=a+b\n",d)
print("e=a+c\n",e)d=a+b
[[2 2 2]
[3 3 3]]
e=a+c
[[2 2 2]
[3 3 3]
[4 4 4]]
高維數(shù)組之間的運(yùn)算
a=np.array([[1,1,1],[2,2,2]])
b=np.array([[[1,1,1],[2,2,2]],[[3,3,3],[4,4,4]]])
c=a+b
print("c=a+b\n",c)c=a+b
[[[2 2 2]
[4 4 4]]
[[4 4 4]
[6 6 6]]]
到此這篇關(guān)于關(guān)于Python中兩個(gè)不同shape的數(shù)組間運(yùn)算規(guī)則的文章就介紹到這了,更多相關(guān)Python兩個(gè)不同shape的數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談python 讀excel數(shù)值為浮點(diǎn)型的問(wèn)題
今天小編就為大家分享一篇淺談python 讀excel數(shù)值為浮點(diǎn)型的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
pyCaret效率倍增開(kāi)源低代碼的python機(jī)器學(xué)習(xí)工具
這篇文章主要介紹了pyCaret一款可以使效率倍增的開(kāi)源低代碼的python機(jī)器學(xué)習(xí)工具,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11
Python實(shí)現(xiàn)使用dir獲取類的方法列表
今天小編就為大家分享一篇Python實(shí)現(xiàn)使用dir獲取類的方法列表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
瀏覽器常用基本操作之python3+selenium4自動(dòng)化測(cè)試(基礎(chǔ)篇3)
瀏覽器常用基本操作有很多種,今天給大家介紹python3+selenium4自動(dòng)化測(cè)試的操作方法,是最最基礎(chǔ)的一篇,對(duì)python3 selenium4自動(dòng)化測(cè)試相關(guān)知識(shí)感興趣的朋友一起看看吧2021-05-05
在notepad++中實(shí)現(xiàn)直接運(yùn)行python代碼
今天小編就為大家分享一篇在notepad++中實(shí)現(xiàn)直接運(yùn)行python代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12

