NumPy(Numerical Python 的缩写)是一个开源的 Python 科学计算库。通过 NumPy,可以高效地处理 数组和矩阵数据,并提供大量用于 线性代数、傅里叶变换、随机数生成 的函数。在数据处理中,经常需要将一个数组 拆分为多个子数组。拆分(Split)可以看作是 数组连接(Join / Concatenate)的反向操作。本文主要介绍 NumPy 中常用的数组拆分方法,包括 array_split()、split()、hsplit()、vsplit()、dsplit()。

1、使用 array_split() 拆分 NumPy 数组

array_split() 是最常用、也是最灵活的数组拆分函数。

语法

np.array_split(array, sections, axis=0)

参数说明:

  • array:要拆分的数组

  • sections:拆分数量

  • axis:拆分轴(默认 0)

示例:将一维数组拆分为 3 部分

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6])

newarr = np.array_split(arr, 3)

print(newarr)

输出:

[array([1, 2]), array([3, 4]), array([5, 6])]

📌 返回值是一个 列表(list),每个元素都是一个子数组。

拆分不均匀情况

当数组元素数量 不能平均拆分 时,array_split() 会自动调整。

示例:拆分为 4 部分

arr = np.array([1, 2, 3, 4, 5, 6])
newarr = np.array_split(arr, 4)

print(newarr)

输出示例:

[array([1, 2]), array([3, 4]), array([5]), array([6])]

说明:

  • 前面的子数组可能多 1 个元素

  • 自动均衡拆分

2、split()array_split() 的区别 

NumPy 还提供了 split() 方法。

但两者有重要区别:

函数是否允许不均匀拆分
array_split✅ 允许
split❌ 不允许

示例:split() 失败情况

np.split(arr, 4)

报错:

ValueError: array split does not result in an equal division

📌 因此建议:

不确定能否整除 → 用 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])

输出:

[1 2] [3 4] [5 6]

4、拆分二维数组

拆分二维数组与一维数组语法相同,只是结构更复杂。

默认沿 axis=0(按行)拆分。

示例:按行拆分二维数组

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)

输出:

[array([[1, 2], [3, 4]]), array([[5, 6], [7, 8]]), array([[ 9, 10], [11, 12]])]

示例:每行 3 个元素的二维数组拆分

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)

同样返回 3 个二维数组。

5、指定轴进行拆分

可以通过 axis 参数指定拆分方向。

示例:按列拆分(axis=1)

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)

说明:

  • axis=1 → 按列拆分

  • 返回 3 个二维数组

6、使用 hsplit() 拆分数组

hsplit()hstack() 的反向操作。

作用:

沿水平方向(列)拆分数组

示例

import numpy as np

arr = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

newarr = np.hsplit(arr, 3)

print(newarr)

7、vsplit() 与 dsplit()

与连接函数类似,NumPy 也提供对应拆分函数。

vsplit()(按行拆分)

newarr = np.vsplit(arr, 3)

等价于:

np.split(arr, 3, axis=0)

dsplit()(按深度拆分)

用于拆分三维数组:

np.dsplit(arr3d, 2)

8、函数对比总结

函数拆分方向是否允许不均匀
array_split任意 axis
split任意 axis
hsplit
vsplit
dsplit深度

9、常见易错点 

1️⃣ 拆分数量必须合理

np.hsplit(arr, 4)

若列数不足会报错。

2️⃣ 一维数组不能用 vsplit

ValueError: vsplit only works on arrays of 2or more dimensions

3️⃣ 推荐使用原则

  • 不确定能否整除 → array_split

  • 明确等分 → split / hsplit / vsplit

推荐文档