NumPy陣列追加

跟Python列表操作append類似,NumPy中也有append函式,但它的表現有些時候也想Python列表裡面的extend方法。

陣列append

我們先把ndarray.append的語法列出來,方便學習和查閱。

numpy.append(arr, values, axis = None)

輸入引數

引數名稱 資料型別 說明
arr array_like 要新增元素的陣列
values array_like 被新增陣列
axis INT 根據此處指定的軸方向來進行append操作

我們來開始舉例,

In [1]: import numpy as np
        arrayA = np.arange(12).reshape(3, 4)
        arrayB = np.ones((1, 4))
        np.append(arrayA, arrayB)
        
Out[1]: array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11.,  1.,
        1.,  1.,  1.])

axis沒有被賦值時,它會將arr重構為一個一維陣列,然後再將被重構為一維陣列的values新增到它的後面,最終結果是一個一維的陣列。所以,這種情況下,它不關係兩個陣列的形狀。

In [2]: np.append(arrayA, arrayB, axis=0)
Out[2]: array([[ 0.,  1.,  2.,  3.],
       [ 4.,  5.,  6.,  7.],
       [ 8.,  9., 10., 11.],
       [ 1.,  1.,  1.,  1.]])
In [2]: np.append(arrayA, np.ones((1, 3)), axis=0)
        ---------------------------------------------------------------------------
        ValueError                                Traceback (most recent call last)
        <ipython-input-25-fe0fb14f5df8> in <module>()
        ----> 1 np.append(arrayA, np.ones((1, 3)), axis=0)

        D:\ProgramData\Anaconda3\lib\site-packages\numpy\lib\function_base.py in append(arr, values, axis)
           5164         values = ravel(values)
           5165         axis = arr.ndim-1
        -> 5166     return concatenate((arr, values), axis=axis)

        ValueError: all the input array dimensions except for the concatenation axis must match exactly

axis=0時,values陣列會沿著arr陣列列方向上來新增,假如兩個陣列不具有相同的行元素數量時,就會產生錯誤ValueError: all the input array dimensions except for the concatenation axis must match exactly

同理的,當axis=1時,會沿著行方向來新增,我們就不再這裡舉例了。