NumPy 数组拼接与分割的使用详解

 更新时间:2026年01月06日 09:57:32   作者:Humbunklung  
NumPy 提供了多种方法用于​​数组拼接​​和​​分割,这些操作在数据预处理、特征工程和结果整合中至关重要,下面就来详细的介绍一下NumPy 数组拼接与分割的使用,感兴趣的可以了解一下

NumPy 提供了多种方法用于​​数组拼接(Concatenation)​​和​分割(Splitting)​​,这些操作在数据预处理、特征工程和结果整合中至关重要。

一、数组拼接(Concatenation)​

1. ​核心函数​

函数用途适用场景
np.concatenate()沿指定轴拼接多个数组通用拼接(需数组维度一致)
np.vstack()垂直(按行)拼接二维数组的行叠加
np.hstack()水平(按列)拼接二维数组的列叠加
np.stack()沿新轴堆叠数组增加新维度(如通道维度)

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.vstacknp.hstack
# 垂直拼接(等效于 concatenate(axis=0)
v_combined = np.vstack([a, b])  # 结果同上

# 水平拼接(要求行数相同)
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堆叠(创建三维数组)
stacked = np.stack([x, y], axis=0)  # shape (2,3)
print(stacked)
# 输出:
# [[1 2 3]
#  [4 5 6]]

二、数组分割(Splitting)

1. ​核心函数

|函数 |用途 |适用场景|
|np.split() |沿指定轴均匀分割数组 |等分数组(需可整除)|
|np.vsplit() |垂直分割(按行) |二维数组的行分割|
|np.hsplit() |水平分割(按列) |二维数组的列分割|
|np.array_split() |支持不均匀分割 |处理无法整除的情况|

2. 代码示例

  • np.split 均匀分割
arr = np.arange(9).reshape(3, 3)  # [[0 1 2], [3 4 5], [6 7 8]]

# 沿轴0分割为3个子数组(每行一个)
sub_arrays = np.split(arr, 3, axis=0)  
# 结果: [array([[0,1,2]]), array([[3,4,5]]), array([[6,7,8]])]
  • np.array_split 不均匀分割
# 将6个元素分割为4个子数组(允许不等分)
arr = np.arange(6)  # [0 1 2 3 4 5]
subs = np.array_split(arr, 4)  
# 结果: [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])  
# 结果: 
# [array([[1, 2], [5, 6]]), 
#  array([[3, 4], [7, 8]])]
split_cols

三、内存与性能

1. 拼接后的数组为新对象​​

  • 拼接操作​​始终生成新数组​​(原数据不受影响)
  • 内存占用较高(需存储拼接后的完整数据)

2. 分割后的子数组为视图​​

  • split() 返回的是​​原数组的视图​​(共享内存)
  • 修改子数组会影响原数据
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 → 原数组被修改!

四、实用场景

1. 数据集合并​​

# 合并训练集和验证集
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. 特征与标签分离

data = np.loadtxt("dataset.csv", delimiter=",")
X, y = np.hsplit(data, [-1])  # 最后一列为标签

五、错误处理

常见错误​​ ​​解决方法​​
拼接维度不匹配检查 axis 方向的数据形状一致性
分割数量无法整除改用 np.array_split
修改子数组影响原数据使用 .copy() 创建独立副本

到此这篇关于NumPy 数组拼接与分割的使用详解的文章就介绍到这了,更多相关NumPy 数组拼接与分割内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Django中的AutoField字段使用

    Django中的AutoField字段使用

    这篇文章主要介绍了Django中的AutoField字段使用,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • 解决paramiko执行命令超时的问题

    解决paramiko执行命令超时的问题

    这篇文章主要介绍了解决paramiko执行命令超时的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • django如何实现用户的注册、登录、注销功能

    django如何实现用户的注册、登录、注销功能

    本文详细介绍了创建Django项目的步骤,包括配置数据库、编写用户模型、创建迁移文件、编写表单校验、编写前端页面、编写视图类、编写路由、使用Django自带的管理后台以及具体的文件结构,通过这些步骤,可以实现一个基本的Django项目
    2025-01-01
  • Python对PDF文档和PPT文档的操作详解

    Python对PDF文档和PPT文档的操作详解

    Python办公⾃动化是利⽤Python编程语⾔来创建脚本和程序,以简化、加速和⾃动化⽇常办公任务和⼯作流程的过程,它基于Python的强⼤功能和丰富的第三⽅库,使得能够处理各种办公任务,本文给大家介绍了Python对PDF文档和PPT文档的操作,需要的朋友可以参考下
    2023-12-12
  • Python 基本命令及示例代码(入门必备指南)

    Python 基本命令及示例代码(入门必备指南)

    本文详解Python入门基本命令,涵盖环境安装、语法、条件语句、循环、数据结构、函数、文件操作、异常处理及模块与OOP,帮助初学者快速掌握编程基础,感兴趣的朋友一起看看吧
    2025-07-07
  • python 实现一个贴吧图片爬虫的示例

    python 实现一个贴吧图片爬虫的示例

    下面小编就为大家带来一篇python 实现一个贴吧图片爬虫的示例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • python 已知平行四边形三个点,求第四个点的案例

    python 已知平行四边形三个点,求第四个点的案例

    这篇文章主要介绍了python 已知平行四边形三个点,求第四个点的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • 一文让你秒懂精通pip并快速体验深度学习应用【建议收藏】

    一文让你秒懂精通pip并快速体验深度学习应用【建议收藏】

    在使用python的时候,经常使用到pip这个工具,可以很方便的线上安装依赖库,当然pip还有很多参数都可以帮我们去查询一些库信息,这篇文章主要给大家介绍了如何通过一篇文章让你秒懂精通pip并快速体验深度学习应用的相关资料,需要的朋友可以参考下
    2021-08-08
  • Win10 Anaconda 新建环境安装python-pcl的步骤

    Win10 Anaconda 新建环境安装python-pcl的步骤

    这篇文章主要介绍了Win10 Anaconda 新建环境安装python-pcl的方法,至于VS环境下安装C++ 版本的pcl也可以按照此文提供的步骤安装实现,需要的朋友可以参考下
    2022-04-04
  • 详解Python+OpenCV实现图像二值化

    详解Python+OpenCV实现图像二值化

    图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。本文将通过Python+OpenCV实现这一过程,感兴趣的可以学习一下
    2022-05-05

最新评论