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

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

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

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

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

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

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

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

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

語(yǔ)法:

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

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

import numpy as np
# 兩個(gè)一維數(shù)組(模擬兩個(gè)班級(jí)的學(xué)生分?jǐn)?shù))
class1 = np.array([85, 92, 78, 90])
class2 = np.array([88, 76, 95, 81])
# 拼接為一個(gè)一維數(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
# 兩個(gè)二維數(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
# 兩個(gè)二維數(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. 簡(jiǎn)化拼接函數(shù)(更直觀)

為了避免記錯(cuò) axis 參數(shù),NumPy 提供了更貼合語(yǔ)義的簡(jiǎn)化函數(shù):

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

示例:vstack/hstack 簡(jiǎn)化操作

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

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

一維數(shù)組用 hstack/vstack 會(huì)自動(dòng)調(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ù)組合并為更長(zhǎng)的一維 → (6,)
h_arr = np.hstack((a, b))
print("hstack一維數(shù)組:", h_arr)
print("形狀:", h_arr.shape)  # (6,)

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

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

import numpy as np
# 兩個(gè)二維數(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](深度維度的兩個(gè)值)

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

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

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

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

import numpy as np
# 兩個(gè)三維數(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>

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

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

示例:不兼容的拼接(報(bào)錯(cuò))

import numpy as np
# 錯(cuò)誤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("報(bào)錯(cuò)1:", e)  # all the input array dimensions except for the concatenation axis must match exactly
# 錯(cuò)誤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("報(bào)錯(cuò)2:", e)

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

通過(guò) 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添加一行(補(bǔ)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)

五、常見(jiàn)應(yīng)用場(chǎng)景

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

import numpy as np
# 模擬3組特征數(shù)據(jù)(每組10個(gè)樣本×5個(gè)特征)
feat1 = np.random.rand(10,5)
feat2 = np.random.rand(10,5)
feat3 = np.random.rand(10,5)
# 合并為30個(gè)樣本的數(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個(gè)樣本×1個(gè)新特征
all_feat_new = np.hstack((all_feat, new_feat))
print("添加新特征后形狀:", all_feat_new.shape)  # (30,6)

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

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

場(chǎng)景 3:批量拼接多個(gè)數(shù)組

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

六、避坑點(diǎn)與最佳實(shí)踐

1. 核心避坑點(diǎn)

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

2. 最佳實(shí)踐

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

總結(jié)

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

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

相關(guān)文章

  • python寫(xiě)文件時(shí)覆蓋原來(lái)的實(shí)例方法

    python寫(xiě)文件時(shí)覆蓋原來(lái)的實(shí)例方法

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

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

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

    python中@property注解的具體使用

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

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

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

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

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

    Python的collections模塊真的很好用

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

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

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

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

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

    Python?logging日志模塊的概念與實(shí)踐講解

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

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

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

最新評(píng)論

铁岭市| 巨鹿县| 来凤县| 临清市| 新和县| 孙吴县| 永嘉县| 潼南县| 赣榆县| 望谟县| 宁津县| 咸宁市| 龙口市| 丹阳市| 龙山县| 荣昌县| 蒲城县| 新宁县| 天全县| 新晃| 怀来县| 衡东县| 东台市| 班戈县| 泊头市| 抚松县| 大丰市| 耿马| 鲁甸县| 昭平县| 赤城县| 兴义市| 枣庄市| 延庆县| 老河口市| 凤城市| 霍城县| 梁山县| 呼图壁县| 镇巴县| 安庆市|