亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Numpy數(shù)組的組合與分割實(shí)現(xiàn)的方法

 更新時(shí)間:2021年08月16日 11:27:11   作者:zeroy610  
本文主要介紹了Numpy數(shù)組的組合與分割實(shí)現(xiàn)的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

在介紹數(shù)組的組合和分割前,我們需要先了解數(shù)組的維(ndim)和軸(axis)概念。

如果數(shù)組的元素是數(shù)組,即數(shù)組嵌套數(shù)組,我們就稱其為多維數(shù)組。幾層嵌套就稱幾維。比如形狀為(a,b)的二維數(shù)組就可以看作兩個(gè)一維數(shù)組,第一個(gè)一維數(shù)組包含a個(gè)一維數(shù)組,第二個(gè)一維數(shù)組包含b個(gè)數(shù)據(jù)。

每一個(gè)一維線性數(shù)組稱為一個(gè)軸。二維數(shù)組的第一個(gè)軸(axis=0)就是以數(shù)組為元素的數(shù)組,第二個(gè)軸(axis=1)就是數(shù)組中的數(shù)組。因此第一個(gè)軸的方向就是沿著行的方向(垂直方向),第二個(gè)軸的方向沿著列的方向(水平方向)。

我們從嵌套數(shù)組的角度來看,a[0],a[1],a[2],a[3]……分別是取二維數(shù)組的第一行,二行,三行,四行……這正是先沿著第一個(gè)軸取元素(元素為行)。a[0][0],a[0][1]……則是(沿著第二個(gè)軸)取第一行的第一個(gè)元素,第二個(gè)元素……

也就是說,數(shù)組的軸從最外層數(shù)起。

三維數(shù)組我們應(yīng)該怎么理解呢?我們可以把它看作二維數(shù)組的堆疊,即一個(gè)立方體。它的第一個(gè)軸(axis=0)就是以二維數(shù)組為元素的數(shù)組,它的方向沿著二維數(shù)組堆疊的方向,也就是立方體的高。第二個(gè)軸自然就是立方體的寬,第三個(gè)軸就是立方體的長。舉例來說,一個(gè)形狀為(a,b,c)的三維數(shù)組就是a個(gè)形狀為(b,c)的二維數(shù)組嵌套在一起。

a=np.arange(24).reshape(2,3,4)#建立一個(gè)維度為3,形狀為(2,3,4)的三維數(shù)組
print(a)#打印
print(a.sum(axis=0))#沿第一個(gè)軸求和
print(a.sum(axis=1))#沿第二個(gè)軸求和
print(a.sum(axis=2))#沿第三個(gè)軸求和

'''
a的形狀如下:
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
 
 沿第一個(gè)軸求和:
 [[12 14 16 18]
 [20 22 24 26]
 [28 30 32 34]]
 
 沿第二個(gè)軸求和:
 [[12 15 18 21]
 [48 51 54 57]]
 
 沿第三個(gè)軸求和:
[[ 6 22 38]
 [54 70 86]]
'''

從這個(gè)例子可以看出,沿第一個(gè)軸求和,就是從上方把這個(gè)立方體“壓扁”,第二個(gè)軸就是沿著寬,第三個(gè)軸就是沿著長。類似投影。

我們終于明白了,reshape函數(shù)的參數(shù)順序不是我們想當(dāng)然認(rèn)為的長,寬;長,寬,高;因?yàn)槟銦o法解釋為什么三維數(shù)組變形后的形狀與你所想的大相徑庭。它的順序是軸的順序(第一條軸,第二條軸,第三條軸……),也就是沿這條軸有多少個(gè)元素。軸的概念很重要,在很多函數(shù)中都有體現(xiàn)。

再直觀一點(diǎn)說,參數(shù)順序應(yīng)該是高,寬(行方向),長(列方向)。

所以,數(shù)組的維度就很好理解了,就是軸的數(shù)量。我們?cè)诶斫舛嗑S數(shù)組的時(shí)候,不要先入為主地認(rèn)為多維數(shù)組的元素會(huì)更多;多維數(shù)組只是它嵌套的層數(shù)多而已。高維數(shù)組也可能不含元素。

接下來我們介紹數(shù)組的組合。

數(shù)組的組合

數(shù)組的組合有水平組合,垂直組合,深度組合等方式。實(shí)現(xiàn)這些組合的函數(shù)主要有vstack,dstack,hstack,column_stack,row_stack,concatenate等。

因?yàn)槲覀冏畛S玫臄?shù)組也不過三維,所以用水平,垂直這樣的字眼比較形象;但我們要明白,本質(zhì)上是沿軸進(jìn)行的操作。

數(shù)組組合通常不會(huì)改變數(shù)組的維度。

1.水平組合

hstack函數(shù)與concatenate函數(shù)

1.1hstack函數(shù):水平連接多個(gè)數(shù)組。參數(shù)只有一個(gè):以數(shù)組為元素的序列。

1.2concatenate函數(shù):沿著現(xiàn)有的軸連接數(shù)組序列。

函數(shù)格式:concatenate((a1, a2, ...), axis=0, out=None)

參數(shù)說明:a1, a2, ...:為以數(shù)組為元素的類數(shù)組序列。其中數(shù)組形狀必須相同。

                  axis=0:數(shù)組將沿著這個(gè)軸組合,如果坐標(biāo)軸為None,數(shù)組在使用前被平鋪。int型數(shù)據(jù),可選參數(shù),默認(rèn)為零。

2.垂直組合

vstack函數(shù)與concatenate函數(shù)

2.1vstack函數(shù):垂直連接多個(gè)數(shù)組。參數(shù)如上。

2.2concatenate函數(shù):改一下軸參數(shù)就好。

水平組合和垂直組合是比較直觀的說法,因?yàn)槲覀冇玫淖疃嗟臄?shù)組就是一維和二維;實(shí)際上,它們分別是沿著第二條軸(水平),第一條軸(垂直)進(jìn)行組合。

a=np.array([1])
a=a.reshape(1,1,1,1,1)#只有一個(gè)元素的五維數(shù)組
b=np.array([1])
b=b.reshape(1,1,1,1,1)#與a完全相同
c=np.hstack((a,b))#水平組合
d=np.vstack((a,b))#垂直組合
print(c)
print(d)
print(c.shape)
print(d.shape)

'''
水平組合
[[[[[1]]]


  [[[1]]]]]
  
垂直組合  
[[[[[1]]]]

 [[[[1]]]]]
 
c的形狀
(1, 2, 1, 1, 1) 

d的形狀
(2, 1, 1, 1, 1)
'''

3.行組合和列組合

3.1row_stack函數(shù):行組合

將一維數(shù)組按行方向組合起來,對(duì)于二維數(shù)組完全等同于vstack。對(duì)于多維數(shù)組,實(shí)際上就是沿第一個(gè)軸進(jìn)行組合。

3.2colum_stack函數(shù):列組合

將一維數(shù)組按列方向組合起來,對(duì)于二維數(shù)組完全等同于hstack。對(duì)于多維數(shù)組,實(shí)際上就是沿第二個(gè)軸進(jìn)行組合。

a=np.array([0,1,2])
b=np.array([1,2,3])
c=np.row_stack((a,b))
d=np.column_stack((a,b))
print(c)
print(d)

'''
行組合
[[0 1 2]
 [1 2 3]]

列組合
[[0 1]
 [1 2]
 [2 3]]

'''

a=np.array([0,1,2]).reshape(1,1,1,1,3)
b=np.array([1,2,3]).reshape(1,1,1,1,3)
c=np.row_stack((a,b))
d=np.column_stack((a,b))
print(c)
print(d)
print(c.shape)
print(d.shape)

'''
行組合
[[[[[0 1 2]]]]

 [[[[1 2 3]]]]]
[[[[[0 1 2]]]

列組合
  [[[1 2 3]]]]]
  
c形狀
(2, 1, 1, 1, 3)
d形狀
(1, 2, 1, 1, 3)

'''

4.深度組合

沿著第三個(gè)軸進(jìn)行組合。

a=np.array([0,1,2])
b=np.array([1,2,3])
c=np.dstack((a,b))#深度組合
print(c)
print(a.shape)
print(c.shape)

'''
[[[0 1]
  [1 2]
  [2 3]]]
(3,)
(1, 3, 2)
'''

a=np.array([0,1,2]).reshape(1,1,1,3)
b=np.array([1,2,3]).reshape(1,1,1,3)
c=np.dstack((a,b))
print(c.shape)

'''
(1, 1, 2, 3)
'''

當(dāng)數(shù)組維度比較小的時(shí)候,比如一維和二維,如果組合時(shí)沒有第二和第三參數(shù),函數(shù)會(huì)自動(dòng)為其在形狀左側(cè)補(bǔ)1,也就是拓展一層。這和之前說過的廣播機(jī)制十分類似。 

數(shù)組的分割

數(shù)組可以進(jìn)行水平,垂直等方式進(jìn)行分割。相關(guān)函數(shù):hsplit,vsplit,dsplit,split。

我們可以將數(shù)組分割成相同大?。ㄐ螤睿┑淖訑?shù)組,也可以指定分割的位置。

1.水平分割

hsplit函數(shù)和split函數(shù)。

沿水平方向,就是沿列方向,沿第二條軸(axis=1)方向。

1.1hsplit函數(shù)

格式:hsplit(ary, indices_or_sections)

第一個(gè)參數(shù)是數(shù)組;第二個(gè)參數(shù)是一個(gè)整數(shù)或列表,如果不指定,就會(huì)分割成相同大小的子數(shù)組。

a=np.arange(16).reshape(4,4)
pp.pprint(a)
pp.pprint(np.hsplit(a,2))#平均分割成兩部分
pp.pprint(np.hsplit(a,[2,3]))#沿第二,三列,分割成三部分


'''
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
       
分割成兩部分
[array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]),
 array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])]
       
分割成三部分
[array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]),
 array([[ 2],
       [ 6],
       [10],
       [14]]),
 array([[ 3],
       [ 7],
       [11],
       [15]])]
'''

1.2split函數(shù)

函數(shù)格式:split(ary, indices_or_sections, axis=0)

第一個(gè)參數(shù):數(shù)組。

第二個(gè)參數(shù):整數(shù)或列表,可選參數(shù)。

第三個(gè)參數(shù):軸,可選參數(shù)。

a=np.arange(24).reshape(4,6)
print(a)
pp.pprint(np.split(a,[2],axis=0))

'''

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
[array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11]]),
 array([[12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])]

'''

上面這個(gè)例子里,我們選擇了第一條軸,也就是列方向。然后找到第二行一分為二。

a=np.arange(24).reshape(2,3,4)
print(a)
pp.pprint(np.split(a,[1],axis=0))#沿第一條軸,高
pp.pprint(np.split(a,[1],axis=1))#沿第二條軸,寬
pp.pprint(np.split(a,[1],axis=2))#沿第三條軸,長

'''

[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
  
[array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]]]),
 array([[[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]]])]
        
        
[array([[[ 0,  1,  2,  3]],

       [[12, 13, 14, 15]]]),
 array([[[ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

       [[16, 17, 18, 19],
        [20, 21, 22, 23]]])]
        
        
[array([[[ 0],
        [ 4],
        [ 8]],

       [[12],
        [16],
        [20]]]),
 array([[[ 1,  2,  3],
        [ 5,  6,  7],
        [ 9, 10, 11]],

       [[13, 14, 15],
        [17, 18, 19],
        [21, 22, 23]]])]
'''

上面是一個(gè)三維數(shù)組切割的例子。

2.垂直分割

vsplit函數(shù)和split函數(shù)

沿垂直方向,就是沿行方向,沿第一條軸(axis=0)方向。

split函數(shù)如上,改一條軸參數(shù)即可。

3.深度分割

dsplit函數(shù)

主要用于三維數(shù)組,其實(shí)就是沿第三條軸切割,就好比從上方切蛋糕一樣。

a=np.arange(24).reshape(2,3,4)
b=np.dsplit(a,4)#把這個(gè)蛋糕從上切成四份
pp.pprint(b)

'''
[array([[[ 0],
        [ 4],
        [ 8]],

       [[12],
        [16],
        [20]]]),
 array([[[ 1],
        [ 5],
        [ 9]],

       [[13],
        [17],
        [21]]]),
 array([[[ 2],
        [ 6],
        [10]],

       [[14],
        [18],
        [22]]]),
 array([[[ 3],
        [ 7],
        [11]],

       [[15],
        [19],
        [23]]])]

'''

到此這篇關(guān)于Numpy數(shù)組的組合與分割實(shí)現(xiàn)的方法的文章就介紹到這了,更多相關(guān)Numpy數(shù)組組合與分割內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python opencv捕獲攝像頭并顯示內(nèi)容的實(shí)現(xiàn)

    python opencv捕獲攝像頭并顯示內(nèi)容的實(shí)現(xiàn)

    這篇文章主要介紹了python opencv捕獲攝像頭并顯示內(nèi)容的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python基于opencv實(shí)現(xiàn)的人臉識(shí)別(適合初學(xué)者)

    Python基于opencv實(shí)現(xiàn)的人臉識(shí)別(適合初學(xué)者)

    OpenCV是一個(gè)基于BSD許可開源發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺庫,下面這篇文章主要給大家介紹了關(guān)于Python基于opencv實(shí)現(xiàn)的人臉識(shí)別,文中通過實(shí)例代碼介紹的非常詳細(xì),本文的教程非常適合初學(xué)者,需要的朋友可以參考下
    2022-03-03
  • 淺談關(guān)于Python3中venv虛擬環(huán)境

    淺談關(guān)于Python3中venv虛擬環(huán)境

    這篇文章主要介紹了淺談關(guān)于Python3中venv虛擬環(huán)境,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • Python入門教程(七)Python數(shù)字類型

    Python入門教程(七)Python數(shù)字類型

    這篇文章主要介紹了Python入門教程(七)Python數(shù)字類型,Python是一門非常強(qiáng)大好用的語言,也有著易上手的特性,本文為入門教程,需要的朋友可以參考下
    2023-04-04
  • Python的Tqdm模塊實(shí)現(xiàn)進(jìn)度條配置

    Python的Tqdm模塊實(shí)現(xiàn)進(jìn)度條配置

    這篇文章主要介紹了Python的Tqdm模塊實(shí)現(xiàn)進(jìn)度條配置,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python字符串操作的15種方法匯總

    python字符串操作的15種方法匯總

    對(duì)于python中的字符串,有多種操作方法,下面這篇文章主要給大家介紹了關(guān)于python字符串操作的15種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Python安裝Matplotlib包完整步驟記錄

    Python安裝Matplotlib包完整步驟記錄

    這篇文章主要給大家介紹了關(guān)于Python安裝Matplotlib包的相關(guān)資料,Matplotlib是一個(gè)Python 2D繪圖庫,它以多種硬拷貝格式和跨平臺(tái)的交互式環(huán)境生成出版物質(zhì)量的圖形,需要的朋友可以參考下
    2023-12-12
  • python打包exe開機(jī)自動(dòng)啟動(dòng)的實(shí)例(windows)

    python打包exe開機(jī)自動(dòng)啟動(dòng)的實(shí)例(windows)

    今天小編就為大家分享一篇python打包exe開機(jī)自動(dòng)啟動(dòng)的實(shí)例(windows),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Jupyter notebook命令和編輯模式常用快捷鍵匯總

    Jupyter notebook命令和編輯模式常用快捷鍵匯總

    這篇文章主要介紹了Jupyter notebook命令和編輯模式常用快捷鍵匯總,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • python使用梯度下降和牛頓法尋找Rosenbrock函數(shù)最小值實(shí)例

    python使用梯度下降和牛頓法尋找Rosenbrock函數(shù)最小值實(shí)例

    這篇文章主要介紹了python使用梯度下降和牛頓法尋找Rosenbrock函數(shù)最小值實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04

最新評(píng)論