天天看點

python中stack,hstack,vstack,dstack和concatenate的差別

做cs231n 有用這個函數,于是了解一下stack和concatenate的簡單差別,記錄一下自己的了解。

stack

函數原型為:stack(array,axis = 0),array可以傳數組和清單,axis 表示對指定軸的疊加,可以取0,1,2三個值,分别表示不同的軸。

上代碼:

import numpy as py
x1 = np.arange(9).reshape(3,3)
x2 = np.arange(10,19,1).reshape(3,3)
x3 = np.arange(20,29,1).reshape(3,3)
a1 = np.array([[1,2,3],[4,5,6]])

           

當axis = 0時

python中stack,hstack,vstack,dstack和concatenate的差別

當axis =1時

python中stack,hstack,vstack,dstack和concatenate的差別

當axis = 2時

python中stack,hstack,vstack,dstack和concatenate的差別

可以看到當axis =0時是對第一維進行加維,而等于1(行)和2(列)的時候是對第二維和第三維進行加維。

axis = 0時,把兩個33的數組拼接起來看,增加一維将1變成2,變成(2,3,3)由2個33的數組組成。

axis = 1時,把兩個33的數組按行的方式拼接起來看,在行上增加一維,變成(3,2,3),由3個23的數組組成,分别将兩個數組每一行行進行打包組成。

axis = 2時,把兩個數組按列的方式拼接起來,在列上增加一維,變成(3,3,2),由3個3*2的數組組成,分别将兩個數組同樣位置的元素按列的方式打包組成。

hstack

函數原型:hstack(),可以是元組清單或者numpy數組,傳回結果為numpy的數組。按列的順序(水準)把數組堆疊起來,組成一個數組。而vstack則剛好相反。

python中stack,hstack,vstack,dstack和concatenate的差別

vstack

vstack按照行的順序(垂直)把兩個數組堆疊起來。

python中stack,hstack,vstack,dstack和concatenate的差別

dstack

dstack,deep stack,是對軸2的合并,類似stack,當axis = 2時的結果。

python中stack,hstack,vstack,dstack和concatenate的差別

concatenate

concatenate((x1,x2…),axis =0),這個函數就是按照特定軸的方向進行拼接,當axis = 0時,按照行進行拼接,當axis = 1時按照列進行拼接。

當axis = 0時,等效于vstack。

當axis = 1時,等效于hstack

python中stack,hstack,vstack,dstack和concatenate的差別

一般感覺用concatenate用的比較hstack 和 vstack多.

繼續閱讀