最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

NumPy中數(shù)組的拼接(Concatenation)的使用

 更新時間:2026年04月17日 09:52:48   作者:林深時見鹿1  
數(shù)組拼接是指將多個形狀兼容的數(shù)組,本文就來詳細(xì)的介紹一下NumPy中數(shù)組的拼接(Concatenation)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、數(shù)組拼接的核心定義

數(shù)組拼接是指將多個形狀兼容的數(shù)組,沿著指定的軸(axis) 合并為一個新數(shù)組:

  • 軸(axis):拼接的方向,二維數(shù)組中 axis=0 表示按行拼接(垂直方向),axis=1 表示按列拼接(水平方向);
  • 形狀兼容:除拼接軸外,其他維度的大小必須完全一致(比如按行拼接時,所有數(shù)組的列數(shù)必須相同);
  • 核心函數(shù):np.concatenate()(通用拼接)、np.vstack()(垂直拼接)、np.hstack()(水平拼接)、np.dstack()(深度拼接)。

二、核心拼接函數(shù)(分類講解)

NumPy 提供了多個拼接函數(shù),其中 np.concatenate() 是最通用的底層函數(shù),其他 vstack/hstack 是其簡化版(無需指定軸)。

1. 通用拼接:np.concatenate ()(核心)

語法:

np.concatenate((arr1, arr2, ...), axis=0, out=None) 
  • (arr1, arr2, ...):待拼接的數(shù)組元組(必須用元組 / 列表包裹,不能直接傳多個數(shù)組);
  • axis:拼接軸(默認(rèn) 0),一維數(shù)組只能用 axis=0;
  • out:可選,指定輸出數(shù)組(一般不用);
  • 返回值:新數(shù)組(拼接后的結(jié)果,獨立內(nèi)存,不共享原數(shù)組數(shù)據(jù))。

示例 1:一維數(shù)組合并(最基礎(chǔ))

import numpy as np
# 兩個一維數(shù)組(模擬兩個班級的學(xué)生分?jǐn)?shù))
class1 = np.array([85, 92, 78, 90])
class2 = np.array([88, 76, 95, 81])
# 拼接為一個一維數(shù)組(axis=0,唯一可選)
all_scores = np.concatenate((class1, class2))
print("拼接后一維數(shù)組:", all_scores)  # [85 92 78 90 88 76 95 81]
print("拼接后形狀:", all_scores.shape)  # (8,)

示例 2:二維數(shù)組按行拼接(axis=0)

按行拼接要求所有數(shù)組的列數(shù)相同(垂直方向堆疊):

import numpy as np
# 兩個二維數(shù)組(列數(shù)均為3)
arr1 = np.array([[1, 2, 3], [4, 5, 6]])  # 2行3列
arr2 = np.array([[7, 8, 9], [10, 11, 12]])  # 2行3列
# 按行拼接(axis=0)→ 4行3列
arr_v = np.concatenate((arr1, arr2), axis=0)
print("按行拼接結(jié)果:\n", arr_v)
print("拼接后形狀:", arr_v.shape)  # (4, 3)

輸出

按行拼接結(jié)果:
 [[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
拼接后形狀: (4, 3)

示例 3:二維數(shù)組按列拼接(axis=1)

按列拼接要求所有數(shù)組的行數(shù)相同(水平方向拼接):

import numpy as np
# 兩個二維數(shù)組(行數(shù)均為2)
arr1 = np.array([[1, 2], [3, 4]])  # 2行2列
arr2 = np.array([[5, 6], [7, 8]])  # 2行2列
arr3 = np.array([[9], [10]])       # 2行1列
# 按列拼接(axis=1)→ 2行5列(2+2+1)
arr_h = np.concatenate((arr1, arr2, arr3), axis=1)
print("按列拼接結(jié)果:\n", arr_h)
print("拼接后形狀:", arr_h.shape)  # (2, 5)

輸出

按列拼接結(jié)果:
 [[ 1  2  5  6  9]
 [ 3  4  7  8 10]]
拼接后形狀: (2, 5)

2. 簡化拼接函數(shù)(更直觀)

為了避免記錯 axis 參數(shù),NumPy 提供了更貼合語義的簡化函數(shù):

函數(shù)作用等價于適用場景
np.vstack()垂直拼接(按行)np.concatenate(..., axis=0)一維 / 二維數(shù)組按行堆疊
np.hstack()水平拼接(按列)np.concatenate(..., axis=1)一維 / 二維數(shù)組按列拼接
np.dstack()深度拼接(按第三個維度)np.concatenate(..., axis=2)三維數(shù)組拼接

示例:vstack/hstack 簡化操作

import numpy as np
# 二維數(shù)組
arr1 = np.array([[1,2],[3,4]])
arr2 = np.array([[5,6],[7,8]])
# 垂直拼接(等價于 axis=0)
arr_v = np.vstack((arr1, arr2))
print("vstack結(jié)果:\n", arr_v)  # 4行2列
# 水平拼接(等價于 axis=1)
arr_h = np.hstack((arr1, arr2))
print("hstack結(jié)果:\n", arr_h)  # 2行4列

示例:一維數(shù)組的 hstack/vstack 特殊處理

一維數(shù)組用 hstack/vstack 會自動調(diào)整維度:

import numpy as np
a = np.array([1,2,3])  # 形狀(3,)
b = np.array([4,5,6])  # 形狀(3,)
# vstack:一維數(shù)組合并為二維(按行)→ (2,3)
v_arr = np.vstack((a, b))
print("vstack一維數(shù)組:\n", v_arr)
print("形狀:", v_arr.shape)  # (2,3)
# hstack:一維數(shù)組合并為更長的一維 → (6,)
h_arr = np.hstack((a, b))
print("hstack一維數(shù)組:", h_arr)
print("形狀:", h_arr.shape)  # (6,)

3. 深度拼接:np.dstack ()(三維數(shù)組)

按第三個維度(深度)拼接,適用于圖像、三維數(shù)據(jù):

import numpy as np
# 兩個二維數(shù)組(形狀均為(2,3))
arr1 = np.array([[1,2,3],[4,5,6]])
arr2 = np.array([[7,8,9],[10,11,12]])
# 深度拼接 → 形狀(2,3,2)
d_arr = np.dstack((arr1, arr2))
print("dstack結(jié)果形狀:", d_arr.shape)  # (2,3,2)
print("dstack結(jié)果[0,0,:]:", d_arr[0,0,:])  # [1,7](深度維度的兩個值)

三、高維數(shù)組拼接(進(jìn)階)

高維數(shù)組拼接的核心是明確拼接軸的編號,維度編號從 0 開始:

  • 三維數(shù)組形狀 (a,b,c) → 軸 0=a、軸 1=b、軸 2=c;
  • 拼接時,除拼接軸外,其他維度大小必須一致。

示例:三維數(shù)組拼接

import numpy as np
# 兩個三維數(shù)組:形狀(2,3,4)(軸0=2,軸1=3,軸2=4)
arr1 = np.arange(24).reshape(2,3,4)
arr2 = np.arange(24,48).reshape(2,3,4)
# 按軸0拼接 → 形狀(4,3,4)
concat0 = np.concatenate((arr1, arr2), axis=0)
print("按軸0拼接形狀:", concat0.shape)  # (4,3,4)
# 按軸1拼接 → 形狀(2,6,4)
concat1 = np.concatenate((arr1, arr2), axis=1)
print("按軸1拼接形狀:", concat1.shape)  # (2,6,4)
# 按軸2拼接 → 形狀(2,3,8)
concat2 = np.concatenate((arr1, arr2), axis=2)
print("按軸2拼接形狀:", concat2.shape)  # (2,3,8)

四、拼接的兼容性規(guī)則(核心避坑?。?/h2>

拼接失敗的唯一原因是形狀不兼容,需牢記:

除拼接軸外,其他所有維度的大小必須完全一致。

示例:不兼容的拼接(報錯)

import numpy as np
# 錯誤1:按行拼接(axis=0)但列數(shù)不同
arr1 = np.array([[1,2],[3,4]])  # 2行2列
arr2 = np.array([[5,6,7],[8,9,10]])  # 2行3列
try:
    np.concatenate((arr1, arr2), axis=0)
except ValueError as e:
    print("報錯1:", e)  # all the input array dimensions except for the concatenation axis must match exactly
# 錯誤2:按列拼接(axis=1)但行數(shù)不同
arr3 = np.array([[1,2],[3,4]])  # 2行2列
arr4 = np.array([[5,6]])        # 1行2列
try:
    np.concatenate((arr3, arr4), axis=1)
except ValueError as e:
    print("報錯2:", e)

解決方法:調(diào)整數(shù)組形狀(reshape/expand_dims)

通過 reshapenp.expand_dims 讓數(shù)組形狀兼容:

import numpy as np
# 原數(shù)組:arr4是(1,2),行數(shù)為1(arr3行數(shù)為2,不兼容)
arr3 = np.array([[1,2],[3,4]])
arr4 = np.array([[5,6]])
# 方法1:給arr4添加一行(補0)
arr4_exp = np.vstack((arr4, [[0,0]]))  # 變?yōu)?行2列
concat_ok = np.concatenate((arr3, arr4_exp), axis=1)
print("調(diào)整后拼接結(jié)果:\n", concat_ok)
# 方法2:擴(kuò)展維度(一維→二維)
a = np.array([1,2,3])  # (3,)
b = np.array([[4,5,6]]) # (1,3)
# 先將a轉(zhuǎn)為(1,3),再按行拼接
a_2d = np.expand_dims(a, axis=0)  # (1,3)
concat_a_b = np.concatenate((a_2d, b), axis=0)
print("一維轉(zhuǎn)二維后拼接:\n", concat_a_b)

五、常見應(yīng)用場景

場景 1:合并多組數(shù)據(jù)(機(jī)器學(xué)習(xí)數(shù)據(jù)集)

import numpy as np
# 模擬3組特征數(shù)據(jù)(每組10個樣本×5個特征)
feat1 = np.random.rand(10,5)
feat2 = np.random.rand(10,5)
feat3 = np.random.rand(10,5)
# 合并為30個樣本的數(shù)據(jù)集(按行拼接)
all_feat = np.concatenate((feat1, feat2, feat3), axis=0)
print("合并后數(shù)據(jù)集形狀:", all_feat.shape)  # (30,5)
# 合并特征列(比如添加新特征)
new_feat = np.random.rand(30,1)  # 30個樣本×1個新特征
all_feat_new = np.hstack((all_feat, new_feat))
print("添加新特征后形狀:", all_feat_new.shape)  # (30,6)

場景 2:合并時間序列數(shù)據(jù)(溫度數(shù)據(jù))

import numpy as np
# 模擬3月和4月的溫度數(shù)據(jù)(各31天×24小時)
march_temp = np.random.normal(5,6,(31,24)).round(1)
april_temp = np.random.normal(15,5,(30,24)).round(1)
# 合并為2個月的溫度數(shù)據(jù)(按行拼接,行數(shù)31+30=61)
spring_temp = np.vstack((march_temp, april_temp))
print("春季溫度數(shù)據(jù)形狀:", spring_temp.shape)  # (61,24)

場景 3:批量拼接多個數(shù)組

import numpy as np
# 生成10個一維數(shù)組,每個數(shù)組5個元素
arr_list = [np.random.randint(0,10,5) for _ in range(10)]
# 拼接為一個一維數(shù)組
all_arr = np.concatenate(arr_list, axis=0)
print("批量拼接后形狀:", all_arr.shape)  # (50,)

六、避坑點與最佳實踐

1. 核心避坑點

  • ? 誤區(qū):直接傳多個數(shù)組給 concatenate(必須用元組 / 列表包裹,如 (arr1,arr2));
  • ? 錯誤:一維數(shù)組用 axis=1 拼接(一維數(shù)組只有 axis=0,會報錯);
  • ? 忽略:拼接軸的方向(二維數(shù)組 axis=0 是行,axis=1 是列,易記反);
  • ? 混淆:vstack 對一維數(shù)組的處理(會轉(zhuǎn)為二維,而 concatenate 保持一維)。

2. 最佳實踐

  • ? 簡單拼接用 vstack/hstack(語義清晰,無需記 axis);
  • ? 高維數(shù)組用 np.concatenate(明確指定 axis);
  • ? 拼接前檢查形狀:用 arr.shape 確認(rèn)除拼接軸外其他維度一致;
  • ? 批量拼接多個數(shù)組時,先放入列表,再傳給 concatenate;
  • ? 需頻繁拼接時,先預(yù)分配數(shù)組(np.empty)再填充,比多次拼接更高效。

總結(jié)

  1. NumPy 數(shù)組拼接的核心是 np.concatenate(),vstack/hstack 是簡化版(分別對應(yīng) axis=0/1);
  2. 拼接規(guī)則:除拼接軸外,其他維度大小必須完全一致,否則報錯;
  3. 維度說明:
    • 一維數(shù)組:僅能按 axis=0 拼接(hstack 合并為更長一維,vstack 轉(zhuǎn)為二維);
    • 二維數(shù)組:axis=0 按行拼接(列數(shù)一致),axis=1 按列拼接(行數(shù)一致);
  4. 避坑關(guān)鍵:拼接前檢查形狀兼容性,一維數(shù)組需轉(zhuǎn)二維時用 np.expand_dims;
  5. 常用場景:合并數(shù)據(jù)集、添加特征列、合并時間序列數(shù)據(jù)。

到此這篇關(guān)于NumPy中數(shù)組的拼接(Concatenation)的使用的文章就介紹到這了,更多相關(guān)NumPy 數(shù)組拼接內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python寫文件時覆蓋原來的實例方法

    python寫文件時覆蓋原來的實例方法

    這篇文章主要介紹了python寫文件時覆蓋原來的實例方法,對此有興趣的朋友們可以參考下。
    2020-07-07
  • 用Python把csv文件批量修改編碼為UTF-8格式并轉(zhuǎn)為Excel格式的方法

    用Python把csv文件批量修改編碼為UTF-8格式并轉(zhuǎn)為Excel格式的方法

    有時候用excel打開一個csv文件,中文全部顯示亂碼,然后手動用notepad++打開,修改編碼為utf-8并保存后,再用excel打開顯示正常,本文將給大家介紹一下用Python把csv文件批量修改編碼為UTF-8格式并轉(zhuǎn)為Excel格式的方法,需要的朋友可以參考下
    2023-09-09
  • python中@property注解的具體使用

    python中@property注解的具體使用

    property是 Python 內(nèi)置的裝飾器,用于將類的方法轉(zhuǎn)換為屬性式訪問,本文就來詳細(xì)的介紹一下@property注解的使用,感興趣的可以了解一下
    2025-12-12
  • Python使用django搭建web開發(fā)環(huán)境

    Python使用django搭建web開發(fā)環(huán)境

    這篇文章主要為大家詳細(xì)介紹了Python使用django搭建web開發(fā)環(huán)境,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Python實現(xiàn)計算信息熵的示例代碼

    Python實現(xiàn)計算信息熵的示例代碼

    信息熵(information?entropy)是信息論的基本概念。描述信息源各可能事件發(fā)生的不確定性。本文將通過Python實現(xiàn)信息熵的計算,感興趣的可以了解一下
    2022-12-12
  • Python的collections模塊真的很好用

    Python的collections模塊真的很好用

    collections是實現(xiàn)了特定目標(biāo)的容器,以提供Python標(biāo)準(zhǔn)內(nèi)建容器 dict , list , set , 和 tuple 的替代選擇,本文詳細(xì)總結(jié)collections的相關(guān)知識,感興趣的朋友跟隨看看吧
    2021-03-03
  • Django之富文本(獲取內(nèi)容,設(shè)置內(nèi)容方式)

    Django之富文本(獲取內(nèi)容,設(shè)置內(nèi)容方式)

    這篇文章主要介紹了Django之富文本(獲取內(nèi)容,設(shè)置內(nèi)容方式),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • bpython 功能強(qiáng)大的Python shell

    bpython 功能強(qiáng)大的Python shell

    bpython是一個不錯的Python解釋器的界面,本文帶著大家了解認(rèn)識一下bpython,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Python?logging日志模塊的概念與實踐講解

    Python?logging日志模塊的概念與實踐講解

    本文通過具體的代碼示例為大家解釋了如何高效地使用logging模塊進(jìn)行日志記錄,以及如何避免常見的陷阱,希望可以幫助大家更好地掌握這個強(qiáng)大的工具
    2023-07-07
  • 使用Python繪制帶填充紋理的堆疊圖

    使用Python繪制帶填充紋理的堆疊圖

    在數(shù)據(jù)分析和可視化中,堆疊條形圖是一種非常有用的工具,能夠直觀地展示不同類別在各個樣本中的分布情況,下面我們來看看具體實現(xiàn)方法吧
    2025-07-07

最新評論

满城县| 茶陵县| 平罗县| 台东县| 原阳县| 屯门区| 金寨县| 凤山县| 天长市| 准格尔旗| 河北省| 会昌县| 五指山市| 旺苍县| 长丰县| 闽侯县| 嘉鱼县| 邢台市| 章丘市| 库尔勒市| 会东县| 德安县| 龙山县| 叶城县| 乌鲁木齐市| 阳泉市| 大宁县| 科技| 叶城县| 香港 | 崇礼县| 通许县| 文成县| 太仆寺旗| 静安区| 屏南县| 宜君县| 文登市| 新闻| 民丰县| 泰和县|