欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Numpy中stack(),hstack(),vstack()函數(shù)用法介紹及實(shí)例

 更新時(shí)間:2022年02月17日 15:59:10   作者:neu_張康  
這篇文章主要介紹了Numpy中stack(),hstack(),vstack()函數(shù)用法介紹及實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下

1.stack()函數(shù)

函數(shù)原型為:stack(arrays,axis=0),arrays可以傳數(shù)組和列表。axis的含義我下面會(huì)講解,我們先來(lái)看個(gè)例子,然后我會(huì)分析輸出結(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我傳的是一個(gè)列表,現(xiàn)在我開(kāi)始講解這個(gè)stack()函數(shù)的意思,它就是對(duì)arrays里面的每個(gè)元素(可能是個(gè)列表,元組,或者是個(gè)numpy的數(shù)組)變成numpy的數(shù)組后,再對(duì)每個(gè)元素增加一維(至于維度加在哪里,是靠axis控制的),然后再把這些元素串起來(lái)(至于怎么串,我下面會(huì)說(shuō))。

arrays里面的每個(gè)元素必須形狀是一樣的,例如本例中列表a中的兩個(gè)元素[1,2,3]和[4,5,6]的形狀是一樣的,如果把[4,5,6]換成[4,5] ,那么程序會(huì)報(bào)錯(cuò)!而axis代表的是在哪個(gè)維度上加一維,例如axis=0(它是默認(rèn)的)代表的就是增加的這一維的下標(biāo)為0,axis等于多少不是隨便亂寫(xiě)的,如果參數(shù)arrays里面的每個(gè)元素是個(gè)1維的,那么調(diào)用stack()函數(shù)增加一維后會(huì)變成2維的,所以axis只能等于0和1(維度的下標(biāo)是從0開(kāi)始的),而參數(shù)axis=0和axis=1得到的結(jié)果是不一樣的。

例如上面的代碼中a列表中的第一個(gè)元素為[1,2,3],那么當(dāng)axis=0的時(shí)候,就是在它的中括號(hào)外面再加一個(gè)中括號(hào),變成[ [1,2,3] ](其實(shí)1,2,3之間是沒(méi)有逗號(hào)的,因?yàn)閟tack()函數(shù)會(huì)先把參數(shù)arrays中的每個(gè)元素變成numpy的數(shù)組,數(shù)組之間是沒(méi)有逗號(hào)的,看看上面的代碼輸出就知道了,這里大家明白就行,我為了方便講解,下面還會(huì)加上逗號(hào)),這樣最外面那層中括號(hào)才代表維度下標(biāo)為0的那維;當(dāng)axis=1的時(shí)候,就是在里面加個(gè)中括號(hào),變成了[ [1],[2],[3] ],這樣里面加的那層中括號(hào)才代表維度下標(biāo)為1的那維。同理當(dāng)axis=0的時(shí)候[4,5,6]變成[ [ 4,5,6] ],當(dāng)axis=1的時(shí)候,變成[ [4],[5],[6] ]。下面我們講如何把增加一維度后的每個(gè)元素串起來(lái)。

怎么把上面那兩個(gè)元素增加維度后的結(jié)果串起來(lái)呢,其實(shí)很簡(jiǎn)單?,F(xiàn)在我們已經(jīng)知道了增加維度無(wú)非是增加中括號(hào)的意思,至于在哪里加中括號(hào),取決于axis等于幾。我們把增加的中括號(hào)想像成一個(gè)個(gè)的箱子。還拿上面的代碼來(lái)說(shuō),當(dāng)axis=0的時(shí)候,我們把套在[1,2,3]外面的中括號(hào)(就是[ [1,2,3] ]最外層的那個(gè)中括號(hào))看做是箱子A,這個(gè)箱子A也會(huì)套在[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)在再來(lái)看當(dāng)axis=1的時(shí)候,對(duì)于[1,2,3],我們把套在1外面的箱子(就是上面講的[ [1],[2],[3] ]中1外面的那層中括號(hào))看做A,套在2外面的看做B,套在3外面的看做C,同理,箱子A也會(huì)套在4的外面,箱子B也會(huì)套在5的外面,箱子C也會(huì)套在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)了沒(méi)有,串起來(lái)的時(shí)候其實(shí)就是把a(bǔ)rrays中每個(gè)元素在相同的位置套箱子的一些小塊(這里叫小塊這個(gè)名詞可能不洽當(dāng),但是大家明白就行)放在一起后,再套箱子,就是外面套個(gè)中括號(hào),這就是堆疊。

再看下面的代碼的輸出,測(cè)試下你理解的沒(méi)有。

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]]

你會(huì)發(fā)現(xiàn)輸出結(jié)果和上面的代碼一樣,其實(shí)它倆就是一樣的。只不過(guò)當(dāng)你對(duì)arrays傳參的時(shí)候,如果你傳的參數(shù)是類(lèi)似于(a,b,c)這種,它會(huì)把(a,b,c)當(dāng)做一個(gè)元組來(lái)看,a,b,c都是元組的每個(gè)元素。然后分別對(duì)每個(gè)元素處理,上面我已經(jīng)說(shuō)了,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最外面都需要套箱子(就是加中括號(hào)),那么我把你們先放一起,變成下面這樣

[[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]

]

然后開(kāi)始分別在 [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體會(huì)它的含義

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ù)組給堆疊起來(lái),vstack()函數(shù)正好和它相反。

3. vstack()函數(shù)

函數(shù)原型:vstack(tup) ,參數(shù)tup可以是元組,列表,或者numpy數(shù)組,返回結(jié)果為numpy的數(shù)組??聪旅娴拇a體會(huì)它的含義

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ù)組給堆疊起來(lái)。

總結(jié)

以上就是本文關(guān)于Numpy中stack(),hstack(),vstack()函數(shù)用法介紹及實(shí)例的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專(zhuān)題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • 使用Python?http.server模塊共享文件的方法詳解

    使用Python?http.server模塊共享文件的方法詳解

    大家好,今天給大家介紹一下Python標(biāo)準(zhǔn)庫(kù)中的http.server模塊,這個(gè)模塊提供了一種簡(jiǎn)單的方式來(lái)快速啟動(dòng)一個(gè)HTTP服務(wù)器,文中給大家介紹了使用Python?http.server模塊共享文件的方法,需要的朋友可以參考下
    2024-05-05
  • Python利用多線(xiàn)程同步鎖實(shí)現(xiàn)多窗口訂票系統(tǒng)(推薦)

    Python利用多線(xiàn)程同步鎖實(shí)現(xiàn)多窗口訂票系統(tǒng)(推薦)

    這篇文章主要介紹了Python利用多線(xiàn)程同步鎖實(shí)現(xiàn)多窗口訂票系統(tǒng),主要是利用threading.lock()通過(guò)實(shí)例代碼相結(jié)合給大家講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 如何使用python iter方法讀取文件

    如何使用python iter方法讀取文件

    iter()是Python的內(nèi)置函數(shù),用于生成迭代器,允許逐個(gè)訪(fǎng)問(wèn)元素,節(jié)省內(nèi)存使用,iter()可以應(yīng)用于文件對(duì)象,實(shí)現(xiàn)逐行讀取,此外,iter()還可以與自定義結(jié)束標(biāo)記結(jié)合使用,適用于處理固定塊數(shù)據(jù)讀取,相較于其他文件讀取方法,iter()方法簡(jiǎn)單高效,適合處理大文件,減少內(nèi)存占用
    2024-10-10
  • 詳解Django框架中用戶(hù)的登錄和退出的實(shí)現(xiàn)

    詳解Django框架中用戶(hù)的登錄和退出的實(shí)現(xiàn)

    這篇文章主要介紹了詳解Django框架中用戶(hù)的登錄和退出的實(shí)現(xiàn),Django是重多Python人氣框架中最為知名的一個(gè),需要的朋友可以參考下
    2015-07-07
  • python?對(duì)excel交互工具的使用詳情

    python?對(duì)excel交互工具的使用詳情

    這篇文章主要介紹了python?對(duì)excel交互工具的使用詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • python如何使用base加密解密

    python如何使用base加密解密

    base編碼是一種加密解密措施,目前常用的有base16、base32和base64,以base64為例,base64加密后共有64中字符,本文給大家分享python使用base加密解密的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • Django序列化組件Serializers使用詳解

    Django序列化組件Serializers使用詳解

    本文主要系統(tǒng)性的講解django rest framwork 序列化組件的使用,基本看完可以解決工作中序列化90%的問(wèn)題,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-09-09
  • Python教程之基本運(yùn)算符的使用(下)

    Python教程之基本運(yùn)算符的使用(下)

    Python運(yùn)算符通常用于對(duì)值和變量執(zhí)行操作。這些是用于邏輯和算術(shù)運(yùn)算的標(biāo)準(zhǔn)符號(hào)。在本文中,我們將研究運(yùn)算符的優(yōu)先級(jí)和關(guān)聯(lián)性,感興趣的可以了解一下
    2022-09-09
  • Python?pyecharts實(shí)時(shí)畫(huà)圖自定義可視化經(jīng)緯度熱力圖

    Python?pyecharts實(shí)時(shí)畫(huà)圖自定義可視化經(jīng)緯度熱力圖

    這篇文章主要為大家介紹了Python?pyecharts實(shí)時(shí)畫(huà)圖自定義經(jīng)緯度熱力圖實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 由Python編寫(xiě)的MySQL管理工具代碼實(shí)例

    由Python編寫(xiě)的MySQL管理工具代碼實(shí)例

    這篇文章主要介紹了由Python編寫(xiě)的MySQL管理工具,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評(píng)論