网易首页 > 网易号 > 正文 申请入驻

NumPy 函数手册:数组拼接与堆叠

0
分享至

在数据分析、科学计算以及机器学习中,经常需要将多个数组组合为一个整体。例如:

• 合并多个数据批次

• 按列拼接特征

• 按行堆叠样本

• 构造高维张量或分块矩阵

NumPy 提供了一组用于数组拼接与堆叠的函数。需要注意的是,这些操作均返回新数组,不会原地修改输入数组。

按照功能划分,NumPy 中常见的数组拼接与堆叠函数通常可以分为以下几类:

(1)沿已有轴拼接

(2)沿新轴堆叠

(3)分块拼接(结构拼接)

(4)按方向组织的便捷拼接接口

(5)列向量/行方向便捷接口

(6)简化拼接接口

一、沿已有轴拼接

concatenate()

沿指定轴将多个数组连接起来。返回拼接后的新数组。

numpy.concatenate((a1, a2, ...), axis=0, out=None, dtype=None, casting='same_kind')

参数说明:

• (a1, a2, ...):待拼接的数组序列(形状需兼容)

• axis:拼接轴(默认 0)

• out:可选输出数组

• dtype:目标数据类型

• casting:类型转换规则

'unsafe':允许任意转换(可能丢失信息)

示例 1:按行拼接

np.concatenate((a, b), axis=0)

输出:

 [5 6]]

示例 2:按列拼接

np.concatenate((a, a), axis=1)

输出:

 [3 4 3 4]]

示例 3:展平拼接(axis=None)

np.concatenate((a, b), axis=None)

输出:

[1 2 3 4 5 6]

当 axis=None 时,所有输入数组会先被展平成一维数组,再进行拼接。

特别说明:

所有拼接函数的基础形式是:除拼接轴外,其余维度必须一致。

二、沿新轴堆叠

stack()

在新轴上堆叠数组,从而构造更高维结构。返回堆叠后的新数组。

numpy.stack(arrays, axis=0)

参数说明:

• arrays:数组序列(形状必须完全一致)

• axis:新轴的位置

示例 1:

np.stack((a, b), axis=0)    # 堆叠后数组的形状为 (2, 3)

输出:

 [4 5 6]]

axis=0 表示在第 0 轴插入新维度。

示例 2:

np.stack((a, b), axis=1)  # 堆叠后数组的形状为 (3, 2, 1)

输出:

  [6]]]

axis=1 表示在第 1 轴插入新维度。

stack() 新增维度的尺寸与输入数组的个数一致。

三、分块拼接(结构拼接)

block()

按照嵌套列表结构,将多个数组拼接为一个整体数组。返回拼接后的新数组。

numpy.block(arrays)

参数说明:

• arrays:嵌套列表(list of lists),用于描述拼接结构

示例 1:二维块拼接

          [C, A]])

输出:

 [5 6 1 2]]

该结构等价于分块矩阵:

[C  A]

示例 2:构造块对角矩阵

          [Z, I]])

输出:

 [0. 0. 0. 1.]]

• 同一“行块”中的数组必须在行数上兼容

• 同一“列块”中的数组必须在列数上兼容

block() 本质上是对 concatenate() 的递归封装。

四、按方向组织的便捷拼接接口

以下函数是对 concatenate() 的语义封装。

vstack()

按行方向拼接数组(axis=0)。

numpy.vstack(tup)

参数说明:

• tup:数组序列(由多个数组对象按顺序组成的可迭代容器,可以是元组、列表或其它可迭代对象)

示例 1:

np.vstack((a, b))        # 拼接后数组的形状为 (3, 2)

输出:

 [5 6]]

说明:一维数组会先转为二维行向量。

示例 2:

np.vstack((a, b))         # 拼接后数组的形状为 (3, 3)

输出:

 [7 8 9]]

vstack() 会先将一维输入视为二维行向量,再沿第 0 轴拼接;对二维数组而言,可理解为等价于 concatenate(..., axis=0)。

hstack()

按列方向拼接数组。

numpy.hstack(tup)

示例:

np.hstack((a, b))       # 拼接后数组的形状为 (2, 3)

输出:

 [3 4 6]]

对二维及更高维数组,hstack() 等价于沿 axis=1 调用 concatenate();对于一维数组,它等价于沿 axis=0 进行拼接。

dstack()

沿第三轴拼接数组。

numpy.dstack(tup)

示例:

d = np.dstack((a, b, c))             # d.shape 为 (2, 4, 3)

输出:

  [  8  80 800]]]

dstack() 会先将输入调整为至少三维,再沿第三个轴(axis=2)进行拼接。对于二维输入,可理解为在结果中形成“深度”方向的组合。

五、列向量/行方向便捷接口

column_stack()

按列堆叠数组。

numpy.column_stack(tup)

参数说明:

• tup:数组序列

示例 1:

np.column_stack((a, b))

输出:

 [3 6]]

说明:一维数组会被视为列向量。

示例 2:

np.column_stack((a, b))

输出:

 [3 6]]

column_stack() 要求数组的第一维长度一致。对于二维输入,它的效果可理解为按列执行 hstack();对于一维输入,会先将每个输入视为列向量,再进行横向拼接。

row_stack()

按行堆叠数组。

numpy.row_stack(tup)

示例:

np.row_stack((a, b))

输出:

 [4 5 6]]

row_stack() 的行为与 vstack() 一致,通常可视为其等价接口。在实际使用中,vstack() 更常见。

六、简化拼接接口

append()

在数组末尾追加元素。总是返回数组副本(copy)。

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

参数说明:

• arr:输入数组

• values:追加的数据

• axis:拼接轴

示例 1:

np.append(a, 4)

输出:

[1 2 3 4]

说明:在数组末尾添加新元素。

示例 2:二维数组(指定轴)

np.append(a, b, axis=0)

输出:

 [5 6]]

示例 3:axis=None(展平后追加)

np.append(a, [5, 6])

输出:

[1 2 3 4 5 6]

• append() 本质是 concatenate() 的简化形式

• 当 axis=None 时,会先将数组展平后再拼接

• append() 不会原地扩展原数组,而是返回拼接后的新数组

小结

NumPy 提供了一套完整的数组拼接与堆叠机制,其中 concatenate() 用于沿已有轴拼接,stack() 用于创建新维度,block() 用于构造分块结构,而 vstack()、hstack()、column_stack() 等函数则提供了更高层的语义封装。需要特别注意,不同函数在是否新增维度、输入形状要求以及一维数组处理方式方面存在差异,在实际应用中应根据数据结构与计算目标合理选择。


点赞有美意,赞赏是鼓励

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
伊朗发出最后通牒!俄通告全球将参战,法国上将:中估计也要到了

伊朗发出最后通牒!俄通告全球将参战,法国上将:中估计也要到了

共工之锚
2026-04-04 19:35:29
亲戚借车从不加油,这次他故意空着油箱给她,她老公却急了:我上次不是刚加了600块的油吗!

亲戚借车从不加油,这次他故意空着油箱给她,她老公却急了:我上次不是刚加了600块的油吗!

黎兜兜
2026-04-05 11:13:53
日本前自卫官:日本正走向“可实战”的军事体系

日本前自卫官:日本正走向“可实战”的军事体系

新京报
2026-04-05 11:20:04
张雪机车logo被曝涉嫌抄袭?网友:logo是白送的!

张雪机车logo被曝涉嫌抄袭?网友:logo是白送的!

老张聊设计
2026-04-06 12:10:08
美论坛:为什么中国在明确我们不会偿还的情况下还要购买美债?

美论坛:为什么中国在明确我们不会偿还的情况下还要购买美债?

共工之锚
2026-04-06 00:15:47
广东今日早报!再创CBA纪录,新大外浮出水面,萨林杰休战一周

广东今日早报!再创CBA纪录,新大外浮出水面,萨林杰休战一周

多特体育说
2026-04-06 11:05:53
三亚返程炸锅!机票暴涨50倍,一家五口花十万,游客被困进退两难

三亚返程炸锅!机票暴涨50倍,一家五口花十万,游客被困进退两难

青眼财经
2026-04-05 23:47:54
家里有机关事业单位退休老人的注意!

家里有机关事业单位退休老人的注意!

小影的娱乐
2026-04-06 11:14:43
上海一老乡鸡门店标注“3元自助早餐”,两人结账竟被收取45.5元并被告知“仅粥饮自助”,官方客服回应:已反馈调查

上海一老乡鸡门店标注“3元自助早餐”,两人结账竟被收取45.5元并被告知“仅粥饮自助”,官方客服回应:已反馈调查

齐鲁壹点
2026-04-05 09:18:49
韩国人知道他们国家小吗?网友说他们不知道,但导演肯定知道

韩国人知道他们国家小吗?网友说他们不知道,但导演肯定知道

侃神评故事
2026-04-05 15:05:07
西班牙彻底掀桌子 宁弃2026世界杯也要抵制以色列参赛

西班牙彻底掀桌子 宁弃2026世界杯也要抵制以色列参赛

林子说事
2026-04-05 17:04:22
李泽楷被她迷得疯狂,林丹为她不顾孕妻,她有什么魅力?

李泽楷被她迷得疯狂,林丹为她不顾孕妻,她有什么魅力?

观察鉴娱
2026-04-05 21:26:05
油价暴跌变了天!油价180°大反转?明天油价调整!赶快加油!油价马上要涨了?4月7日调价后:全...

油价暴跌变了天!油价180°大反转?明天油价调整!赶快加油!油价马上要涨了?4月7日调价后:全...

新浪财经
2026-04-06 11:46:04
湖人输独行侠1喜3忧!老詹体能不支,艾顿无态度,雷迪克死草主力

湖人输独行侠1喜3忧!老詹体能不支,艾顿无态度,雷迪克死草主力

篮球资讯达人
2026-04-06 10:18:56
塞尔维亚“土耳其溪”天然气管道附近发现“强力炸药”,炸药产自美国,匈牙利外长:攻击该管道就是在攻击匈牙利主权

塞尔维亚“土耳其溪”天然气管道附近发现“强力炸药”,炸药产自美国,匈牙利外长:攻击该管道就是在攻击匈牙利主权

极目新闻
2026-04-06 10:07:00
荒唐!猫王一生睡遍3000女人,42岁惨死卧室,内裤褪到大腿根

荒唐!猫王一生睡遍3000女人,42岁惨死卧室,内裤褪到大腿根

七阿姨爱八卦
2026-04-04 18:04:16
井喷!今晚双色球井喷72注一等奖,单注奖金138万,真的巨离谱!

井喷!今晚双色球井喷72注一等奖,单注奖金138万,真的巨离谱!

王晓爱体彩
2026-04-06 02:41:51
4吨冰毒、一本法国护照,死刑,法国想救人,中国的回应很干脆

4吨冰毒、一本法国护照,死刑,法国想救人,中国的回应很干脆

潮鹿逐梦
2026-04-06 11:08:21
美国人比我们还“怀念”毛主席?伟人的一句话,被拜登视为真理

美国人比我们还“怀念”毛主席?伟人的一句话,被拜登视为真理

锅锅爱历史
2026-03-25 20:20:01
《清明上班图》刷爆全网!网友:上班如上坟

《清明上班图》刷爆全网!网友:上班如上坟

营销头版
2026-04-06 13:05:54
2026-04-06 13:43:00
MediaTea
MediaTea
专业的数字媒体、新媒体技术
1826文章数 80关注度
往期回顾 全部

科技要闻

前同事被蒸馏成Token,AI能否偷走职场经验

头条要闻

牛弹琴:特朗普两个举动很反常 美国上下都很震惊

头条要闻

牛弹琴:特朗普两个举动很反常 美国上下都很震惊

体育要闻

球员系列赛大满贯!赵心童10-3世界第一 加冕赛季第4冠

娱乐要闻

乔任梁离世10年 父母曝舞台光鲜的背后

财经要闻

118吨!这家央行,大幅抛售黄金!

汽车要闻

家用SUV没驾驶乐趣?极氪8X第一个不同意

态度原创

本地
家居
数码
手机
公开课

本地新闻

跟着歌声游安徽,听古村回响

家居要闻

温馨多元 爱的具象化

数码要闻

微星泰坦18 Ultra 2026 (Titan 18 HX)游戏本上市,47999元

手机要闻

澎湃OS3新进展:小米17 Pro Max手机背屏拍照预览问题已优化

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版