第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

首頁 慕課教程 NumPy 入門教程 NumPy 入門教程 Nmupy 數(shù)組高階操作函數(shù)(下)

20 數(shù)組高階操作函數(shù)(下)

Numpy 提供了一系列針對數(shù)組操作的高階函數(shù),除了比較常見的合并,還有分割、追加、插入等操作。

1. 數(shù)組的分割

1.1 numpy.split 函數(shù)

numpy.split 函數(shù)將數(shù)組的副本沿指定軸劃分為子數(shù)組。該函數(shù)的原型如下:

numpy.split(arr, indices_or_sections, axis=0)

參數(shù)說明如下:

參數(shù) 說明
arr 待拆分的輸入數(shù)組
indices_or_sections 整數(shù),表示要從輸入數(shù)組創(chuàng)建的相等大小的子數(shù)組的數(shù)量。如果是1-D數(shù)組,則條目指示要?jiǎng)?chuàng)建新子數(shù)組的點(diǎn)。
axis 連接數(shù)組的軸的方向,默認(rèn)值為0

案例

對于一維數(shù)組的情形,非常簡單。創(chuàng)建1維數(shù)組:

arr_1 = np.array([12, 23, 34, 45, 56, 67, 78, 89, 100, 110, 120, 130])

利用numpy.split函數(shù)將arr_1等分為3塊:

np.split(arr_1, 3)
out:
    [array([12, 23, 34, 45]), array([56, 67, 78, 89]), array([100, 110, 120, 130])]

當(dāng) indices_or_sections 參數(shù)為常數(shù)時(shí),numpy.split 函數(shù)是講數(shù)組進(jìn)行等分。對于無法等分的情況,會(huì)報(bào) ValueError 的錯(cuò)誤。

當(dāng) indices_or_sections 參數(shù)為整數(shù)列表時(shí),表示按照以整數(shù)為位置索引進(jìn)行分割:

np.split(arr_1, [3, 6])
out:
    [array([12, 23, 34]), array([45, 56, 67]), array([ 78,  89, 100, 110, 120, 130])]

案例

對于多維數(shù)組的情形,將內(nèi)層的數(shù)組視為整體,僅考慮最外層的大小進(jìn)行切割:

arr_2 = arr_1.reshape(6,2)
arr_2
out:
    array([[ 12,  23],
       [ 34,  45],
       [ 56,  67],
       [ 78,  89],
       [100, 110],
       [120, 130]])

對 arr_2 進(jìn)行切割:

np.split(arr_2, 3)
out:
    [array([[12, 23],[34, 45]]), 
     array([[56, 67],[78, 89]]), 
     array([[100, 110],[120, 130]])]

案例

可以通過指定 axis 來限制實(shí)際產(chǎn)生分割的維度。例如,對 arr_2 控制分割點(diǎn)在水平位置(axis=1):

np.split(arr_2, 2, axis=1)
out:
    [array([[ 12],
        [ 34],
        [ 56],
        [ 78],
        [100],
        [120]]), array([[ 23],
        [ 45],
        [ 67],
        [ 89],
        [110],
        [130]])]

需要注意比較 axis=1 和默認(rèn)(axis=0)參數(shù)時(shí)的區(qū)別。

1.2 numpy.hsplit 函數(shù)

numpy.hsplit 是 split() 函數(shù)的一個(gè)特例,其中 axis 為 1 表示水平分割,與輸入數(shù)組的維度無關(guān)。

案例

對上述指定 axis=1(水平分割)時(shí)的分割效果,可以用 numpy.hsplit 改寫如下:

np.hsplit(arr_2, 2)
out:
    [array([[ 12],
        [ 34],
        [ 56],
        [ 78],
        [100],
        [120]]), array([[ 23],
        [ 45],
        [ 67],
        [ 89],
        [110],
        [130]])]

1.3 numpy.vsplit 函數(shù)

numpy.vsplit 是 split() 函數(shù)的一個(gè)特例,其中 axis 為 1 表示垂直分割,與輸入數(shù)組的維度無關(guān)。

案例

對于上述指定 axis=0(默認(rèn)參數(shù))時(shí)的分割效果,可以用 numpy.vsplit 改寫如下:

np.vsplit(arr_2, 3)
out:
    [array([[12, 23],[34, 45]]), 
     array([[56, 67],[78, 89]]), 
     array([[100, 110],[120, 130]])]

2. 數(shù)組追加

2.1 numpy.append 函數(shù)

numpy.append 函數(shù)可以在輸入數(shù)組末尾,追加一個(gè)尺寸匹配的數(shù)組,與列表中 append 的操作類似。但是輸入數(shù)組的尺寸必須匹配,否則將生成 ValueError。該函數(shù)的原型如下:

numpy.append(arr, values, axis)

參數(shù)說明如下:

參數(shù) 說明
arr 輸入數(shù)組
values 待追加的數(shù)組,values在不包括附加軸的情況下,其形狀需與arr保持一致
axis 附加操作的軸。如果沒有給出,則兩個(gè)參數(shù)會(huì)先折疊為一維

案例

以二維數(shù)組為例,對 arr_2 的 axis=0 方向追加數(shù)組:

np.append(arr_2, [[1, 2]], axis=0)
out:
    array([[ 12,  23],
       [ 34,  45],
       [ 56,  67],
       [ 78,  89],
       [100, 110],
       [120, 130],
       [  1,   2]])

案例

以二維數(shù)組為例,對 arr_2 的 axis=1 方向追加數(shù)組:

np.append(arr_2, [[1], [2], [3], [4], [5], [6]], axis=1)
out:
    array([[ 12,  23,   1],
       [ 34,  45,   2],
       [ 56,  67,   3],
       [ 78,  89,   4],
       [100, 110,   5],
       [120, 130,   6]])

案例

當(dāng)不指定 axis 時(shí),在追加動(dòng)作產(chǎn)生前,會(huì)先把輸入數(shù)組展平:

np.append(arr_2, [[1], [2], [3], [4], [5], [6]])
out:
    array([ 12,  23,  34,  45,  56,  67,  78,  89, 100, 110, 120, 130,   1, 2,   3,   4,   5,   6])

當(dāng)不指定axis時(shí),append結(jié)果為一維數(shù)組。

3. 數(shù)組的插入

3.1 numpy.insert 函數(shù)

numpy.insert 函數(shù)沿給定軸和給定索引之前在輸入數(shù)組中插入值。該函數(shù)的原型如下:

numpy.insert(arr, obj, values, axis)

參數(shù)說明如下:

參數(shù) 說明
arr 輸入數(shù)組
obj 待插入位置的索引
values 待插入的值數(shù)組
axis 要插入的軸。如果沒有指定,則輸入數(shù)組會(huì)先折疊為一維

案例

對于不指定 axis 的情形:

np.insert(arr_2, 2, [123, 456])
out:
    array([ 12,  23, 123, 456,  34,  45,  56,  67,  78,  89, 100, 110, 120, 130])

可以發(fā)現(xiàn),對于 insert 函數(shù),新插入的元素從指定的位置(索引為2)開始,其他元素往后平移。

案例

指定在 axis=0 的軸上插入新元素:

np.insert(arr_2, 2, [123, 456], axis=0)
out:
    array([[ 12,  23],
       [ 34,  45],
       [123, 456],
       [ 56,  67],
       [ 78,  89],
       [100, 110],
       [120, 130]])

案例

當(dāng)指定插入的元素跟輸入數(shù)組形狀不一致時(shí),可以通過廣播規(guī)則進(jìn)行傳播補(bǔ)齊。當(dāng)不滿足廣播規(guī)則,則會(huì)報(bào) ValueError 的錯(cuò)誤。

np.insert(arr_2, 2, [123], axis=0)
out:
    array([[ 12,  23],
       [ 34,  45],
       [123, 123],
       [ 56,  67],
       [ 78,  89],
       [100, 110],
       [120, 130]])

案例

指定在 axis=1 的軸上插入新元素:

np.insert(arr_2, 2, [1, 2, 3, 4, 5, 6], axis=1)
out:
    array([[ 12,  23,   1],
       [ 34,  45,   2],
       [ 56,  67,   3],
       [ 78,  89,   4],
       [100, 110,   5],
       [120, 130,   6]])

4. 小結(jié)

本節(jié)講述了數(shù)組分割與追加的常用方法,其中append函數(shù)與insert函數(shù)在不指定操作軸的時(shí)候,函數(shù)會(huì)首先對輸入數(shù)組進(jìn)行展開操作。而hsplit和vsplit則是已經(jīng)默認(rèn)了計(jì)算方向,使用過程中注意區(qū)分。