Numpy中stack(),hstack(),vstack()函數(shù)用法介紹及實(shí)例
1.stack()函數(shù)
函數(shù)原型為:stack(arrays,axis=0),arrays可以傳數(shù)組和列表。axis的含義我下面會講解,我們先來看個例子,然后我會分析輸出結(jié)果。
import numpy as np
a=[[1,2,3],
[4,5,6]]
print("列表a如下:")
print(a)
print("增加一維,新維度的下標(biāo)為0")
c=np.stack(a,axis=0)
print(c)
print("增加一維,新維度的下標(biāo)為1")
c=np.stack(a,axis=1)
print(c)
輸出:
列表a如下:
[[1, 2, 3], [4, 5, 6]]
增加一維,新維度下標(biāo)為0
[[1 2 3]
[4 5 6]]
增加一維,新維度下標(biāo)為1
[[1 4]
[2 5]
[3 6]]首先這里arrays我傳的是一個列表,現(xiàn)在我開始講解這個stack()函數(shù)的意思,它就是對arrays里面的每個元素(可能是個列表,元組,或者是個numpy的數(shù)組)變成numpy的數(shù)組后,再對每個元素增加一維(至于維度加在哪里,是靠axis控制的),然后再把這些元素串起來(至于怎么串,我下面會說)。
arrays里面的每個元素必須形狀是一樣的,例如本例中列表a中的兩個元素[1,2,3]和[4,5,6]的形狀是一樣的,如果把[4,5,6]換成[4,5] ,那么程序會報(bào)錯!而axis代表的是在哪個維度上加一維,例如axis=0(它是默認(rèn)的)代表的就是增加的這一維的下標(biāo)為0,axis等于多少不是隨便亂寫的,如果參數(shù)arrays里面的每個元素是個1維的,那么調(diào)用stack()函數(shù)增加一維后會變成2維的,所以axis只能等于0和1(維度的下標(biāo)是從0開始的),而參數(shù)axis=0和axis=1得到的結(jié)果是不一樣的。
例如上面的代碼中a列表中的第一個元素為[1,2,3],那么當(dāng)axis=0的時(shí)候,就是在它的中括號外面再加一個中括號,變成[ [1,2,3] ](其實(shí)1,2,3之間是沒有逗號的,因?yàn)閟tack()函數(shù)會先把參數(shù)arrays中的每個元素變成numpy的數(shù)組,數(shù)組之間是沒有逗號的,看看上面的代碼輸出就知道了,這里大家明白就行,我為了方便講解,下面還會加上逗號),這樣最外面那層中括號才代表維度下標(biāo)為0的那維;當(dāng)axis=1的時(shí)候,就是在里面加個中括號,變成了[ [1],[2],[3] ],這樣里面加的那層中括號才代表維度下標(biāo)為1的那維。同理當(dāng)axis=0的時(shí)候[4,5,6]變成[ [ 4,5,6] ],當(dāng)axis=1的時(shí)候,變成[ [4],[5],[6] ]。下面我們講如何把增加一維度后的每個元素串起來。
怎么把上面那兩個元素增加維度后的結(jié)果串起來呢,其實(shí)很簡單?,F(xiàn)在我們已經(jīng)知道了增加維度無非是增加中括號的意思,至于在哪里加中括號,取決于axis等于幾。我們把增加的中括號想像成一個個的箱子。還拿上面的代碼來說,當(dāng)axis=0的時(shí)候,我們把套在[1,2,3]外面的中括號(就是[ [1,2,3] ]最外層的那個中括號)看做是箱子A,這個箱子A也會套在[4,5,6]的外面,所以我們就先把[1,2,3]和[4,5,6]放在一起,變成[1,2,3],[4,5,6],然后再一起套上箱子A,變成[ [1,2,3],[4,5,6] ]這就是當(dāng)axis=0的時(shí)候程序的輸出結(jié)果。
現(xiàn)在再來看當(dāng)axis=1的時(shí)候,對于[1,2,3],我們把套在1外面的箱子(就是上面講的[ [1],[2],[3] ]中1外面的那層中括號)看做A,套在2外面的看做B,套在3外面的看做C,同理,箱子A也會套在4的外面,箱子B也會套在5的外面,箱子C也會套在6的外面。那么我們就把1和4放一起,2和5放一起,3和6放一起,變成[ 1,4 ,2,5 ,3,6 ]然后把箱子A,B,C分別套在1,4 , 2,5 , 3,6的外面,變成[ [1,4] , [2,5] , [3,6] ]這就是程序中axis=1的時(shí)候程序的輸出結(jié)果。
大家發(fā)現(xiàn)了沒有,串起來的時(shí)候其實(shí)就是把a(bǔ)rrays中每個元素在相同的位置套箱子的一些小塊(這里叫小塊這個名詞可能不洽當(dāng),但是大家明白就行)放在一起后,再套箱子,就是外面套個中括號,這就是堆疊。
再看下面的代碼的輸出,測試下你理解的沒有。
import numpy as np
a=[[1,2,3,4],
[5,6,7,8],
[9,10,11,12]]
print("列表a如下:")
print(a)
print("增加一維,新維度的下標(biāo)為0")
c=np.stack(a,axis=0)
print(c)
print("增加一維,新維度的下標(biāo)為1")
c=np.stack(a,axis=1)
print(c)
輸出:
列表a如下:
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
增加一維,新維度的下標(biāo)為0
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
增加一維,新維度的下標(biāo)為1
[[ 1 5 9]
[ 2 6 10]
[ 3 7 11]
[ 4 8 12]]不知道和你想象的輸出一樣不一樣,還有另一種情況,先看下面的代碼。
import numpy as np
a=[1,2,3,4]
b=[5,6,7,8]
c=[9,10,11,12]
print("a=",a)
print("b=",b)
print("c=",c)
print("增加一維,新維度的下標(biāo)為0")
d=np.stack((a,b,c),axis=0)
print(d)
print("增加一維,新維度的下標(biāo)為1")
d=np.stack((a,b,c),axis=1)
print(d)
輸出:
('a=', [1, 2, 3, 4])
('b=', [5, 6, 7, 8])
('c=', [9, 10, 11, 12])
增加一維,新維度的下標(biāo)為0
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
增加一維,新維度的下標(biāo)為1
[[ 1 5 9]
[ 2 6 10]
[ 3 7 11]
[ 4 8 12]]你會發(fā)現(xiàn)輸出結(jié)果和上面的代碼一樣,其實(shí)它倆就是一樣的。只不過當(dāng)你對arrays傳參的時(shí)候,如果你傳的參數(shù)是類似于(a,b,c)這種,它會把(a,b,c)當(dāng)做一個元組來看,a,b,c都是元組的每個元素。然后分別對每個元素處理,上面我已經(jīng)說了,arrays傳的參數(shù)可以是列表,元組,或者numpy數(shù)組。所以傳(a,b,c)和傳[a,b,c]或者當(dāng)x=[a,b,c]的時(shí)候傳x,效果都是一樣的。
上面的代碼處理的arrays元素都是一維變二維的情況,下面我們看看二維變?nèi)S是什么樣的。
import numpy as np
a=[[1,2,3],
[4,5,6]]
b=[[1,2,3],
[4,5,6]]
c=[[1,2,3],
[4,5,6]]
print("a=",a)
print("b=",b)
print("c=",c)
print("增加一維,新維度的下標(biāo)為0")
d=np.stack((a,b,c),axis=0)
print(d)
print("增加一維,新維度的下標(biāo)為1")
d=np.stack((a,b,c),axis=1)
print(d)
print("增加一維,新維度的下標(biāo)為2")
d=np.stack((a,b,c),axis=2)
print(d)
輸出:
('a=', [[1, 2, 3], [4, 5, 6]])
('b=', [[1, 2, 3], [4, 5, 6]])
('c=', [[1, 2, 3], [4, 5, 6]])
增加一維,新維度的下標(biāo)為0
[[[1 2 3]
[4 5 6]]
[[1 2 3]
[4 5 6]]
[[1 2 3]
[4 5 6]]]
增加一維,新維度的下標(biāo)為1
[[[1 2 3]
[1 2 3]
[1 2 3]]
[[4 5 6]
[4 5 6]
[4 5 6]]]
增加一維,新維度的下標(biāo)為2
[[[1 1 1]
[2 2 2]
[3 3 3]]
[[4 4 4]
[5 5 5]
[6 6 6]]]當(dāng)axis=0的時(shí)候,列表a,b,c最外面都需要套箱子(就是加中括號),那么我把你們先放一起,變成下面這樣
[[1,2,3],[4,5,6]], [[1,2,3],[4,5,6]], [[1,2,3],[4,5,6]]
然后在最外面套箱子,變成
[ [[1,2,3],[4,5,6]], [[1,2,3],[4,5,6]], [[1,2,3],[4,5,6]] ]
當(dāng)axis=1的時(shí)候,列表a,b,c中的[1,2,3]需要套同樣的箱子,列表a,b,c中的[4,5,6]需要套同樣的箱子,好,我先把你們放一塊變成下面這樣
[ [1,2,3],[1,2,3],[1,2,3] , [4,5,6],[4,5,6],[4,5,6] ]
然后開始分別在 [1,2,3],[1,2,3],[1,2,3]的外面和[4,5,6],[4,5,6],[4,5,6]的外面套箱子,變成下面這樣
[ [[1,2,3],[1,2,3],[1,2,3]] , [[4,5,6],[4,5,6],[4,5,6]] ]
當(dāng)axis=2的時(shí)候,列表a,b,c中的1,2,3,4,5,6都需要套箱子,我把你們先放一起變成:
[ [1,1,1 , 2,2,2 , 3,3,3], [4,4,4 , 5,5,5 , 6,6,6] ]
然后在1,1,1 ………6,6,6的外面分別套箱子變成:
[ [[1,1,1] , [2,2,2] , [3,3,3]], [[4,4,4] , [5,5,5] , [6,6,6]] ]
關(guān)于stack()函數(shù)就講這么多,這也是我全部理解的部分。
2. hstack()函數(shù)
函數(shù)原型:hstack(tup) ,參數(shù)tup可以是元組,列表,或者numpy數(shù)組,返回結(jié)果為numpy的數(shù)組??聪旅娴拇a體會它的含義
import numpy as np a=[1,2,3] b=[4,5,6] print(np.hstack((a,b))) 輸出:[1 2 3 4 5 6 ]
import numpy as np a=[[1],[2],[3]] b=[[1],[2],[3]] c=[[1],[2],[3]] d=[[1],[2],[3]] print(np.hstack((a,b,c,d))) 輸出: [[1 1 1 1] [2 2 2 2] [3 3 3 3]]
它其實(shí)就是水平(按列順序)把數(shù)組給堆疊起來,vstack()函數(shù)正好和它相反。
3. vstack()函數(shù)
函數(shù)原型:vstack(tup) ,參數(shù)tup可以是元組,列表,或者numpy數(shù)組,返回結(jié)果為numpy的數(shù)組??聪旅娴拇a體會它的含義
import numpy as np a=[1,2,3] b=[4,5,6] print(np.vstack((a,b))) 輸出: [[1 2 3] [4 5 6]]
import numpy as np a=[[1],[2],[3]] b=[[1],[2],[3]] c=[[1],[2],[3]] d=[[1],[2],[3]] print(np.vstack((a,b,c,d))) 輸出: [[1] [2] [3] [1] [2] [3] [1] [2] [3] [1] [2] [3]]
它是垂直(按照行順序)的把數(shù)組給堆疊起來。
總結(jié)
以上就是本文關(guān)于Numpy中stack(),hstack(),vstack()函數(shù)用法介紹及實(shí)例的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
- Numpy中vstack()和hstack()的使用方式
- Numpy中np.vstack()?和?np.hstack()?的實(shí)現(xiàn)
- numpy中hstack vstack stack concatenate函數(shù)示例詳解
- numpy中數(shù)組拼接、數(shù)組合并方法總結(jié)(append(),?concatenate,?hstack,?vstack,?column_stack,?row_stack,?np.r_,?np.c_等)
- numpy中np.dstack()、np.hstack()、np.vstack()用法
- numpy數(shù)組做圖片拼接的實(shí)現(xiàn)(concatenate、vstack、hstack)
- Python numpy實(shí)現(xiàn)數(shù)組合并實(shí)例(vstack,hstack)
- NumPy的hstack函數(shù)詳細(xì)教程
相關(guān)文章
利用Pandas 創(chuàng)建空的DataFrame方法
下面小編就為大家分享一篇利用Pandas 創(chuàng)建空的DataFrame方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
通過Python編程將CSV文件導(dǎo)出為PDF文件的方法
CSV文件通常用于存儲大量的數(shù)據(jù),而PDF文件則是一種通用的文檔格式,便于與他人共享和打印,將CSV文件轉(zhuǎn)換成PDF文件可以幫助我們更好地管理和展示數(shù)據(jù),本文將介紹如何通過Python編程將CSV文件導(dǎo)出為PDF文件,需要的朋友可以參考下2024-06-06
python經(jīng)典練習(xí)百題之猴子吃桃三種解法
這篇文章主要給大家介紹了關(guān)于python經(jīng)典練習(xí)百題之猴子吃桃三種解法的相關(guān)資料, Python猴子吃桃子編程是一個趣味性十足的編程練習(xí),在這個練習(xí)中,我們將要使用Python語言來模擬一只猴子吃桃子的過程,需要的朋友可以參考下2023-10-10
python時(shí)間序列數(shù)據(jù)相減的實(shí)現(xiàn)
本文主要介紹了python時(shí)間序列數(shù)據(jù)相減的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
如何在python開發(fā)工具PyCharm中搭建QtPy環(huán)境(教程詳解)
這篇文章主要介紹了在python開發(fā)工具PyCharm中搭建QtPy環(huán)境,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
python基于Tkinter庫實(shí)現(xiàn)簡單文本編輯器實(shí)例
這篇文章主要介紹了python基于Tkinter庫實(shí)現(xiàn)簡單文本編輯器,實(shí)例分析了Python使用Tkinter庫實(shí)現(xiàn)簡單桌面應(yīng)用程序的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-05-05
python標(biāo)準(zhǔn)庫OS模塊函數(shù)列表與實(shí)例全解
這篇文章主要介紹了python標(biāo)準(zhǔn)庫OS模塊函數(shù)列表與實(shí)例全解,需要的朋友可以參考下2020-03-03

