NumPy 數(shù)組拼接與分割的使用詳解
NumPy 提供了多種方法用于??數(shù)組拼接(Concatenation)??和?分割(Splitting)??,這些操作在數(shù)據(jù)預(yù)處理、特征工程和結(jié)果整合中至關(guān)重要。
一、數(shù)組拼接(Concatenation)?
1. ?核心函數(shù)?
| 函數(shù) | 用途 | 適用場景 |
|---|---|---|
np.concatenate() | 沿指定軸拼接多個數(shù)組 | 通用拼接(需數(shù)組維度一致) |
np.vstack() | 垂直(按行)拼接 | 二維數(shù)組的行疊加 |
np.hstack() | 水平(按列)拼接 | 二維數(shù)組的列疊加 |
np.stack() | 沿新軸堆疊數(shù)組 | 增加新維度(如通道維度) |
2. 代碼示例??
??np.concatenate
import numpy as np a = np.array([[1, 2], [3, 4]]) # shape (2,2) b = np.array([[5, 6]]) # shape (1,2) # 沿軸0(行方向)拼接 c = np.concatenate((a, b), axis=0) print(c) # 輸出: # [[1 2] # [3 4] # [5 6]]
np.vstack和np.hstack
# 垂直拼接(等效于 concatenate(axis=0) v_combined = np.vstack([a, b]) # 結(jié)果同上 # 水平拼接(要求行數(shù)相同) d = np.array([[7], [8]]) # shape (2,1) h_combined = np.hstack([a, d]) print(h_combined) # 輸出: # [[1 2 7] # [3 4 8]]
np.stack增加新維度
x = np.array([1, 2, 3]) y = np.array([4, 5, 6]) # 沿新軸0堆疊(創(chuàng)建三維數(shù)組) stacked = np.stack([x, y], axis=0) # shape (2,3) print(stacked) # 輸出: # [[1 2 3] # [4 5 6]]
二、數(shù)組分割(Splitting)
1. ?核心函數(shù)
|函數(shù) |用途 |適用場景|
|np.split() |沿指定軸均勻分割數(shù)組 |等分?jǐn)?shù)組(需可整除)|
|np.vsplit() |垂直分割(按行) |二維數(shù)組的行分割|
|np.hsplit() |水平分割(按列) |二維數(shù)組的列分割|
|np.array_split() |支持不均勻分割 |處理無法整除的情況|
2. 代碼示例
np.split均勻分割
arr = np.arange(9).reshape(3, 3) # [[0 1 2], [3 4 5], [6 7 8]] # 沿軸0分割為3個子數(shù)組(每行一個) sub_arrays = np.split(arr, 3, axis=0) # 結(jié)果: [array([[0,1,2]]), array([[3,4,5]]), array([[6,7,8]])]
np.array_split不均勻分割
# 將6個元素分割為4個子數(shù)組(允許不等分) arr = np.arange(6) # [0 1 2 3 4 5] subs = np.array_split(arr, 4) # 結(jié)果: [array([0,1]), array([2,3]), array([4]), array([5])] subs
np.hsplit按列分割
matrix = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) # 在第2列和第3列間分割 split_cols = np.hsplit(matrix, [2]) # 結(jié)果: # [array([[1, 2], [5, 6]]), # array([[3, 4], [7, 8]])] split_cols
三、內(nèi)存與性能
1. 拼接后的數(shù)組為新對象??
- 拼接操作??始終生成新數(shù)組??(原數(shù)據(jù)不受影響)
- 內(nèi)存占用較高(需存儲拼接后的完整數(shù)據(jù))
2. 分割后的子數(shù)組為視圖??
- split() 返回的是??原數(shù)組的視圖??(共享內(nèi)存)
- 修改子數(shù)組會影響原數(shù)據(jù)
arr = np.arange(9).reshape(3, 3) sub_arrays = np.split(arr, 3, axis=0) sub_arrays[0][0,0] = 100 print(sub_arrays) # 輸出: [array([[100, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])] print(arr[0, 0]) # 輸出: 100 → 原數(shù)組被修改!
四、實用場景
1. 數(shù)據(jù)集合并??
# 合并訓(xùn)練集和驗證集 X_train = np.random.rand(100, 5) X_val = np.random.rand(20, 5) X_combined = np.concatenate([X_train, X_val], axis=0)

2. ??圖像分塊處理
# 將大圖像分割為8x8小塊 image = np.random.rand(256, 256) blocks = np.split(image, 32, axis=0) # 先垂直分割 blocks = [np.split(block, 32, axis=1) for block in blocks] # 再水平分割 image blocks
3. 特征與標(biāo)簽分離
data = np.loadtxt("dataset.csv", delimiter=",")
X, y = np.hsplit(data, [-1]) # 最后一列為標(biāo)簽
五、錯誤處理
| 常見錯誤?? ? | ?解決方法?? |
|---|---|
| 拼接維度不匹配 | 檢查 axis 方向的數(shù)據(jù)形狀一致性 |
| 分割數(shù)量無法整除 | 改用 np.array_split |
| 修改子數(shù)組影響原數(shù)據(jù) | 使用 .copy() 創(chuàng)建獨立副本 |
到此這篇關(guān)于NumPy 數(shù)組拼接與分割的使用詳解的文章就介紹到這了,更多相關(guān)NumPy 數(shù)組拼接與分割內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用于統(tǒng)計項目中代碼總行數(shù)的Python腳本分享
這篇文章主要介紹了用于統(tǒng)計項目中代碼總行數(shù)的Python腳本分享,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下2015-04-04
Django 如何使用日期時間選擇器規(guī)范用戶的時間輸入示例代碼詳解
這篇文章主要介紹了 Django 如何使用日期時間選擇器規(guī)范用戶的時間輸入,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05
Python實現(xiàn)PDF轉(zhuǎn)換文本詳解
這篇文章主要介紹了詳解用Python把PDF轉(zhuǎn)換為文本方法總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-10-10
修改python plot折線圖的坐標(biāo)軸刻度方法
今天小編就為大家分享一篇修改python plot折線圖的坐標(biāo)軸刻度方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
Python+selenium實現(xiàn)瀏覽器基本操作詳解
這篇文章主要為大家詳細介紹了如何通過python腳本實現(xiàn)瀏覽器的一些基本操作,如:瀏覽器的前進后退、頁面刷新等,感興趣的可以學(xué)習(xí)一下2022-06-06

