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