首頁 > 軟體

關於numpy兩個array疊加操作詳解

2022-08-03 18:06:40

numpy中有很多關於兩個array的操作,疊加方式以及疊加後的維度經常令人迷惑,這篇文章總價一下。

一、 疊加操作

1.add

逐元素操作,若是array + 常數會廣播到每個元素,若是array + array則要求兩個arrayshape一致。

end = 'n'+'*'*50+'n'
a = np.array([[1,2],[3,4]])
b = np.array([[5,6], [7,8]])
print(a+1, end=end)
print(a+b)

輸出:

[[2 3]
 [4 5]]
**************************************************
[[ 6  8]
 [10 12]]

2.concatenate

在指定維度將兩個array進行拼接,不會改變array的維度,要求兩個array的維度相同,且在指定的拼接維度的array size也必須相等,值得注意的是,兩個array的shape不一定一致,比較拗口,看下例子:

end = 'n'+'*'*50+'n'
a = np.array([[1,2],[3,4]])
b = np.array([[5,6], [7,8]])
c = np.array([[5,6]])
d = np.array([5,6])
f = np.array([[5]])

a & c 的shape並不相同:

維度不一致:

長度不一致:

3.stack & hstack

stack 在垂直方向上拼接兩個array(可以指定axis),要求兩個array的shape嚴格一致,結果會增加維度;

hstack 在水平方向(第0維,不可制定axis)拼接兩個array,要求兩者的維度相同,且在第0維的size也相同,拼接結果不改變原有維度 。

stack:結果會在原有維度的基礎上加1

hstack,a和c在0軸的size不同:

hstack,轉置後正常拼接:

二、 size & ndim & shape

這三個概念很容易搞混,其中:

  • size:指的是“元素個數”;
  • ndim:維度,指的是“有多少層巢狀”,即中括號個數,同時和shape的len相等,axis=0指的是最外層中括號,往裡依次遞增;
  • shape:size和ndim綜合起來就是shape,兩個array的shape相同則意味著兩者的ndim相同且在每一個axis上的size也相同。

看下例子:

值得注意的是,ndim和size以及shape沒有必然聯絡,一個ndim不為0的array可能一個元素也沒有:

size相同,shape和ndim也不一定相同:

總結 

到此這篇關於numpy兩個array疊加操作的文章就介紹到這了,更多相關numpy兩個array疊加內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com