9.2 数组的分割 (Splitting)


文档摘要

9.2 数组的分割 (Splitting) NumPy 数组的分割 (Splitting) 在 NumPy 中,数组分割是将一个大的数组分割成多个小的子数组的过程。这在数据处理、并行计算和算法实现中非常有用。NumPy 提供了多种函数来实现数组分割,允许你根据不同的需求进行灵活的操作。 9.2.1 分割函数 NumPy 提供了以下几个主要的数组分割函数: : 通用的分割函数,可以沿指定的轴将数组分割成多个子数组。 : 的水平分割版本 (axis=1)。 : 的垂直分割版本 (axis=0)。 : 的深度分割版本 (axis=2)。 : 类似于 ,但允许分割成大小不等的子数组。 9.2.2 函数详解 是最通用的分割函数。 : 要分割的数组。 : 可以是整数或一维数组。

9.2 数组的分割 (Splitting)

NumPy 数组的分割 (Splitting)

在 NumPy 中,数组分割是将一个大的数组分割成多个小的子数组的过程。这在数据处理、并行计算和算法实现中非常有用。NumPy 提供了多种函数来实现数组分割,允许你根据不同的需求进行灵活的操作。

9.2.1 分割函数

NumPy 提供了以下几个主要的数组分割函数:

  • np.split(array, indices_or_sections, axis): 通用的分割函数,可以沿指定的轴将数组分割成多个子数组。

  • np.hsplit(array, indices_or_sections): np.split 的水平分割版本 (axis=1)。

  • np.vsplit(array, indices_or_sections): np.split 的垂直分割版本 (axis=0)。

  • np.dsplit(array, indices_or_sections): np.split 的深度分割版本 (axis=2)。

  • np.array_split(array, indices_or_sections, axis): 类似于 np.split,但允许分割成大小不等的子数组。

9.2.2 np.split() 函数详解

np.split(array, indices_or_sections, axis) 是最通用的分割函数。

  • array: 要分割的数组。

  • indices_or_sections: 可以是整数或一维数组。

    • 如果是一个整数 N,则数组将沿指定的轴分割成 N 个相等大小的子数组。如果数组的长度不能被 N 整除,则会抛出 ValueError

    • 如果是一个一维数组 [index1, index2, ...],则数组将沿指定的轴在这些索引位置分割。例如,[2, 5] 会在索引 2 和 5 的位置进行分割。

  • axis: 指定分割的轴。默认为 0。

代码示例:

import numpy as np # 一维数组分割 arr = np.arange(10) result = np.split(arr, 2) # 分割成2个子数组 print("一维数组分割成2个子数组:", result) # 输出: [array([0, 1, 2, 3, 4]), array([5, 6, 7, 8, 9])] result = np.split(arr, [3, 6]) # 在索引3和6处分割 print("一维数组在索引3和6处分割:", result) # 输出: [array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8, 9])] # 二维数组分割 arr2d = np.arange(20).reshape(4, 5) print("原始二维数组:\n", arr2d) # 沿行分割 (axis=0) result = np.split(arr2d, 2, axis=0) # 分割成2个子数组 print("沿行分割成2个子数组:\n", result) # 沿列分割 (axis=1) result = np.split(arr2d, [2, 4], axis=1) # 在索引2和4处分割 print("沿列在索引2和4处分割:\n", result)

图示:

9.2.3 np.hsplit()np.vsplit() 函数详解

np.hsplit()np.vsplit() 分别是 np.split() 的水平和垂直分割的简化版本。

  • np.hsplit(array, indices_or_sections) 等价于 np.split(array, indices_or_sections, axis=1)

  • np.vsplit(array, indices_or_sections) 等价于 np.split(array, indices_or_sections, axis=0)

代码示例:

import numpy as np arr2d = np.arange(20).reshape(4, 5) # 水平分割 result = np.hsplit(arr2d, [2, 4]) print("水平分割:\n", result) # 垂直分割 result = np.vsplit(arr2d, 2) print("垂直分割:\n", result)

图示:

9.2.4 np.dsplit() 函数详解

np.dsplit() 用于沿深度方向分割三维数组 (axis=2)。

代码示例:

import numpy as np arr3d = np.arange(27).reshape(3, 3, 3) print("原始三维数组:\n", arr3d) result = np.dsplit(arr3d, 3) print("深度分割:\n", result)

图示:

9.2.5 np.array_split() 函数详解

np.array_split(array, indices_or_sections, axis) 类似于 np.split(),但它允许分割成大小不等的子数组。如果 indices_or_sections 是一个整数 N,并且数组的长度不能被 N 整除,np.array_split() 不会抛出错误,而是会创建大小略有不同的子数组。

代码示例:

import numpy as np arr = np.arange(11) result = np.array_split(arr, 4) # 分割成4个子数组,大小不等 print("不等大小分割:\n", result)

图示:

9.2.6 应用场景

  • 数据并行处理: 将大数据集分割成小块,分配给不同的处理器进行并行处理。

  • 图像处理: 将图像分割成小块进行处理,例如图像分块压缩或特征提取。

  • 机器学习: 将数据集分割成训练集、验证集和测试集。

  • 算法实现: 在某些算法中,需要将数据分割成小块进行处理,例如分治算法。

9.2.7 注意事项

  • 当使用 np.split() 时,如果指定的分割数量不能整除数组的长度,则会抛出 ValueError。 使用np.array_split()可以避免此问题。

  • 分割操作返回的是原始数组的视图 (view),而不是副本。这意味着修改分割后的子数组可能会影响原始数组。如果需要独立的副本,可以使用 .copy() 方法。

  • 理解 axis 参数非常重要,它决定了沿哪个轴进行分割。

9.2.8 总结

NumPy 的数组分割功能为数据处理提供了强大的工具。通过 np.split()np.hsplit()np.vsplit()np.dsplit()np.array_split(),你可以根据不同的需求灵活地分割数组。理解这些函数的用法和注意事项,可以帮助你更有效地处理数据。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U