Python NumPy数组拆分指南:array_split与hsplit详解
本文详细介绍Python中NumPy库的数组拆分操作,重点讲解array_split()与split()的区别,以及如何通过axis参数处理一维和二维数组。内容涵盖沿行或列拆分、hsplit/vsplit替代方案,并提供完整代码示例与运行结果分析,帮助开发者高效实现数据分割。
拆分 NumPy 数组
拆分操作本质上是连接(Joining)操作的逆过程。
连接是指将多个数组合并为一个整体,而拆分则是将一个数组分割为多个子数组。
在 NumPy 中,我们主要使用 array_split() 函数来执行分割任务,该函数需要传入待分割的数组对象以及期望分割成的份数。
实例
将数组分为 3 部分:
import numpy as np arr = np.array([1, 2, 3, 4, 5, 6]) newarr = np.array_split(arr, 3) print(newarr)
运行实例

注释:返回值是一个包含三个数组的数组。
如果数组中的元素少于要求的数量,它将从末尾进行相应调整。
实例
将数组分为 4 部分:
import numpy as np arr = np.array([1, 2, 3, 4, 5, 6]) newarr = np.array_split(arr, 4) print(newarr)
运行实例

提示:我们也有 split() 方法可用,但是当源数组中的元素较少用于拆分时,它将不会调整元素,如上例那样,array_split() 正常工作,但 split() 会失败。
拆分为数组
array_split() 方法的返回值是一个包含每个分割的数组。
如果将一个数组拆分为 3 个数组,则可以像使用任何数组元素一样从结果中访问它们:
实例
访问拆分的数组:
import numpy as np arr = np.array([1, 2, 3, 4, 5, 6]) newarr = np.array_split(arr, 3) print(newarr[0]) print(newarr[1]) print(newarr[2])
运行实例

分割二维数组
拆分二维数组时,请使用相同的语法。
使用 array_split() 方法,传入要分割的数组和想要分割的数目。
实例
把这个 2-D 拆分为三个 2-D 数组。
import numpy as np arr = np.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]]) newarr = np.array_split(arr, 3) print(newarr)
运行实例

上例返回三个 2-D 数组。
让我们看另一个例子,这次 2-D 数组中的每个元素包含 3 个元素。
实例
把这个 2-D 拆分为三个 2-D 数组。
import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18]]) newarr = np.array_split(arr, 3) print(newarr)
运行实例

上例返回三个 2-D 数组。
此外,您可以指定要进行拆分的轴。
下面的例子还返回三个 2-D 数组,但它们沿行 (axis=1) 分割。
实例
沿行把这个 2-D 拆分为三个 2-D 数组。
import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18]]) newarr = np.array_split(arr, 3, axis=1) print(newarr)
运行实例

另一种解决方案是使用与 hstack() 相反的 hsplit()。
实例
使用 hsplit() 方法将 2-D 数组沿着行分成三个 2-D 数组。
import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18]]) newarr = np.hsplit(arr, 3) print(newarr)
运行实例

提示:vsplit() 和 dsplit() 可以使用与 vstack() 和 dstack() 类似的替代方法。
到此这篇关于Python中NumPy的数组拆分的文章就介绍到这了,更多相关NumPy的数组拆分内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













