numpy中數(shù)組拼接、數(shù)組合并方法總結(jié)(append(),?concatenate,?hstack,?vstack,?column_stack,?row_stack,?np.r_,?np.c_等)
零. 維度和軸
Python中可以用numpy中的ndim和shape來分別查看維度,以及在對應(yīng)維度上的長度。直觀上可以根據(jù)符號“[ ]”的層數(shù)來判斷,有m層即為m維,最外面1層對應(yīng)axis0, 依次為axis1,axis2…
c = np.array([[[1,2,3], [4,5,6]]]) c.ndim # 3 # 三維數(shù)組 c.shape # (1, 2, 3) # 在axis 0 上的長度為1,在axis 1上的長度為2, 在axis 2上的長度為3. # 或者可以理解為1層2行3列
一、append()
numpy.append(arr, values, axis=None)
- The arr can be an array-like object or a NumPy array. The values are appended to a copy of this array.
arr可以是類似數(shù)組的對象或NumPy數(shù)組。 這些值將附加到此數(shù)組的副本中。The values are array-like objects and it’s appended to the end of the “arr” elements. - 這些值是類似數(shù)組的對象,并附加到“ arr”元素的末尾。The axis specifies the axis along which values are appended. If the axis is not provided, both the arrays are flattened.
- 該軸指定沿其附加值的軸。 如果未提供軸,則將兩個(gè)陣列展平。
1. 展平兩個(gè)數(shù)組(Flattening Two Arrays)
arr1 = np.array([[1, 2], [3, 4]]) arr2 = np.array([[10, 20], [30, 40]]) # no axis provided, array elements will be flattened arr_flat = np.append(arr1, arr2) print(arr_flat) # [ 1 2 3 4 10 20 30 40]
2. 沿軸合并(Merging Along Axis)
arr_merged = np.append([arr1, arr2], axis=0) # 當(dāng) 2×2 數(shù)組沿 x 軸合并時(shí),輸出數(shù)組大小為 4×2 Merged 2x2 Arrays along Axis-0: [[ 1 2] [ 3 4] [10 20] [30 40]] arr_merged = np.append([arr1, arr2], axis=1) # 當(dāng) 2×2 數(shù)組沿 y 軸合并時(shí),輸出數(shù)組大小為 2×4 Merged 2x2 Arrays along Axis-1: [[ 1 2 10 20] [ 3 4 30 40]]
二、concatenate
concatenate(a_tuple, axis=0, out=None)
- a_tuple:對需要合并的數(shù)組用元組的形式給出
- axis: 沿指定的軸進(jìn)行拼接,默認(rèn)0,即第一個(gè)軸
arr1 = np.array([[1,2,3], [4,5,6]]) # shape: (2, 3) arr2 = np.array([[7,8,9], [11,12,13]]) np.concatenate((arr1, arr2)) # axis=0 array([[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9], [11, 12, 13]]) np.concatenate((arr1, arr2),axis=1) # 這里沿第二個(gè)軸,即列方向進(jìn)行拼接 array([[ 1, 2, 3, 7, 8, 9], [ 4, 5, 6, 11, 12, 13]]) arr3 = np.array([[14,15,16]]) # shape: (1, 3) # 一般進(jìn)行 concatenate 操作的 array 的 shape 需要一致 # 但如果 array 在拼接 axis 方向的 size 不一樣,也可以完成 # arr3 雖然在 axis_0 方向的長度不一致,但 axis1 方向上一致,所以沿 axis_0 可以拼接 np.concatenate((arr1, arr3)) # √ array([[ 1, 2, 3], [ 4, 5, 6], [14, 15, 16]]) # arr3 和 arr1 在 axis_0 方向的長度不一致,報(bào)錯(cuò) np.concatenate((arr1, arr3), axis=1)
三、hstack, vstack
np.hstack((arr1,arr2)) # 水平拼接,沿著行的方向,對列進(jìn)行拼接 array([[ 1, 2, 3, 7, 8, 9], [ 4, 5, 6, 11, 12, 13]]) np.vstack((arr1,arr2)) # 垂直拼接,沿著列的方向,對行進(jìn)行拼接 array([[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9], [11, 12, 13]])
四、column_stack, row_stack
np.column_stack((arr1,arr2)) # 水平拼接,沿著行的方向,對列進(jìn)行拼接 array([[ 1, 2, 3, 7, 8, 9], [ 4, 5, 6, 11, 12, 13]]) np.row_stack((arr1,arr2)) # 垂直拼接,沿著列的方向,對行進(jìn)行拼接 array([[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9], [11, 12, 13]])
五、 np.r_, np.c_
np.r_[arr1,arr2] # 垂直拼接,沿著列的方向,對行進(jìn)行拼接 array([[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9], [11, 12, 13]]) np.c_[arr1,arr2] # 水平拼接,沿著行的方向,對列進(jìn)行拼接 array([[ 1, 2, 3, 7, 8, 9], [ 4, 5, 6, 11, 12, 13]])
六、總結(jié)
方法 | 拼接方式 |
---|---|
concatenate | 提供了axis參數(shù),用于指定拼接方向 |
append | 默認(rèn)先ravel再拼接成一維數(shù)組,也可指定axis |
hstack | 水平拼接,沿著行的方向,對列進(jìn)行拼接 |
vstack | 垂直拼接,沿著列的方向,對行進(jìn)行拼接 |
column_stack | 水平拼接,沿著行的方向,對列進(jìn)行拼接 |
row_stack | 垂直拼接,沿著列的方向,對行進(jìn)行拼接 |
r_ | 垂直拼接,沿著列的方向,對行進(jìn)行拼接 |
c_ | 水平拼接,沿著行的方向,對列進(jìn)行拼接 |
對于兩個(gè)shape一樣的二維array來說:
增加行(對行進(jìn)行拼接)的方法有:
array([[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9], [11, 12, 13]]) np.concatenate((ar1, ar2),axis=0) np.append(ar1, ar2, axis=0) np.vstack((ar1,ar2)) np.row_stack((ar1,ar2)) np.r_[ar1,ar2]
增加列(對列進(jìn)行拼接)的方法有:
array([[ 1, 2, 3, 7, 8, 9], [ 4, 5, 6, 11, 12, 13]]) np.concatenate((ar1, ar2),axis=1) np.append(ar1, ar2, axis=1) np.hstack((ar1,ar2)) np.column_stack((ar1,ar2)) np.c_[ar1,ar2]
參考
https://www.numpy.org.cn/reference/routines/array-manipulation.html#%E7%BB%84%E5%90%88%E6%95%B0%E7%BB%84
http://www.dbjr.com.cn/article/161997.htm
https://blog.csdn.net/u011913417/article/details/106904183
總結(jié)
到此這篇關(guān)于numpy中數(shù)組拼接、數(shù)組合并方法的文章就介紹到這了,更多相關(guān)numpy數(shù)組拼接數(shù)組合并方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python匿名函數(shù)lambda原理及實(shí)例解析
這篇文章主要介紹了python匿名函數(shù)lambda原理及實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02Python?matplotlib實(shí)戰(zhàn)之箱型圖繪制
箱型圖(Box?Plot),也稱為盒須圖或盒式圖,是一種用作顯示一組數(shù)據(jù)分布情況的統(tǒng)計(jì)圖,因型狀如箱子而得名,本文主要為大家介紹了如何使用Matplotlib繪制箱型圖,需要的小伙伴可以參考下2023-08-08基于Python函數(shù)的作用域規(guī)則和閉包(詳解)
下面小編就為大家分享一篇基于Python函數(shù)的作用域規(guī)則和閉包詳解,希望對大家有所幫助。一起跟隨小編過來看看吧2017-11-11Python使用pyinstaller打包成.exe文件執(zhí)行后閃退的圖文解決辦法
這篇文章主要給大家介紹了關(guān)于Python使用pyinstaller打包成.exe文件執(zhí)行后閃退的圖文解決辦法,閃退問題通常是由于程序運(yùn)行過程中出現(xiàn)了未處理的異?;蝈e(cuò)誤,導(dǎo)致程序崩潰,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12Python調(diào)用高德API實(shí)現(xiàn)批量地址轉(zhuǎn)經(jīng)緯度并寫入表格的功能
這篇文章主要介紹了Python調(diào)用高德API實(shí)現(xiàn)批量地址轉(zhuǎn)經(jīng)緯度并寫入表格的功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01python使用梯度下降和牛頓法尋找Rosenbrock函數(shù)最小值實(shí)例
這篇文章主要介紹了python使用梯度下降和牛頓法尋找Rosenbrock函數(shù)最小值實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04Python使用DPKT實(shí)現(xiàn)分析數(shù)據(jù)包
dpkt項(xiàng)目是一個(gè)Python模塊,主要用于對網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行解析和操作,z這篇文章主要為大家介紹了python如何利用DPKT實(shí)現(xiàn)分析數(shù)據(jù)包,有需要的可以參考下2023-10-10Python實(shí)現(xiàn)的自定義多線程多進(jìn)程類示例
這篇文章主要介紹了Python實(shí)現(xiàn)的自定義多線程多進(jìn)程類,結(jié)合實(shí)例形式分析了Python多線程多進(jìn)程的相關(guān)調(diào)用與使用操作技巧,需要的朋友可以參考下2018-03-03