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

作者:

文章目录
  • 常见错误​​ ​ ​解决方法​​ 拼接维度不匹配 检查 axis 方向的数据形状一致性 分割数量无法整除 改用 np.array_split 修改子数组影响原数据 使用 .copy() 创建独立副本 到此这篇关于NumPy 数组拼接与分割的使用详解的文章就介绍到这了,更多相关NumPy 数组拼接与分割内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: numpy数组拼接简单示例 Python numpy实现二维数组和一维数组拼接的方法 numpy数组合并和矩阵拼接的实现 numpy 进行数组拼接,分别在行和列上合并的实例 numpy concatenate数组拼接方法示例介绍
  • 目录
    • 一、数组拼接(Concatenation)​
      • 1. ​核心函数​
      • 2. 代码示例​​
    • 二、数组分割(Splitting)
      • 1. ​核心函数
      • 2. 代码示例
    • 三、内存与性能
      • 1. 拼接后的数组为新对象​​
      • 2. 分割后的子数组为视图​​
    • 四、实用场景
      • 1. 数据集合并​​
      • 2. ​​图像分块处理
      • 3. 特征与标签分离
    • 五、错误处理

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

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

      • ​​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]]
      

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

      • 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
      

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

      • 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 → 原数组被修改!
      

      # 合并训练集和验证集
      X_train = np.random.rand(100, 5)
      X_val = np.random.rand(20, 5)
      X_combined = np.concatenate([X_train, X_val], axis=0)
      

      # 将大图像分割为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
      

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

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

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

      您可能感兴趣的文章:

      • numpy数组拼接简单示例
      • Python numpy实现二维数组和一维数组拼接的方法
      • numpy数组合并和矩阵拼接的实现
      • numpy 进行数组拼接,分别在行和列上合并的实例
      • numpy concatenate数组拼接方法示例介绍

      站内搜索