?
目录
? ?
? ? ??? 数组拆分允许我们根据指定的索引位置或者等份分割的方式将一个数组分解为多个子数组。主要使用的函数是numpy.split
、numpy.hsplit
和numpy.vsplit
,以及它们的等价函数numpy.array_split
。
numpy.split
函数可以按指定的索引位置对数组进行分割,它接受一个数组和一个分割点列表作为参数,并返回一个包含分割后子数组的列表。
import numpy as np
# 创建一个一维数组
arr = np.arange(9)
print("Original array:")
print(arr)
# 按照索引位置分割数组
indices = [2, 5]
result = np.split(arr, indices)
for sub_arr in result:
print("\nSplit Sub-array:")
print(sub_arr)
# 输出:
# Original array:
# [0 1 2 3 4 5 6 7 8]
#
# Split Sub-array:
# [0 1]
#
# Split Sub-array:
# [2 3 4]
#
# Split Sub-array:
# [5 6 7 8]
# 对于二维数组,可以通过设置axis参数来控制分割方向
arr_2d = np.arange(12).reshape(3, 4)
print("\n2D Array:")
print(arr_2d)
# 沿着行(axis=0)方向分割
result_2d_rows = np.split(arr_2d, [1], axis=0)
for row_arr in result_2d_rows:
print("\nSplit Row-subarray:")
print(row_arr)
# 沿着列(axis=1)方向分割
result_2d_cols = np.split(arr_2d, [2], axis=1)
for col_arr in result_2d_cols:
print("\nSplit Column-subarray:")
print(col_arr)
输出:
2D Array:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
Split Row-subarray:
[[0 1 2 3]]
Split Row-subarray:
[[ 4 5 6 7]
[ 8 9 10 11]]
Split Column-subarray:
[[0 1]
[4 5]
[8 9]]
Split Column-subarray:
[[ 2 3]
[ 6 7]
[10 11]]
np.hsplit
np.hsplit
用于沿数组的水平轴拆分数组,它是 np.split
的特殊情况,适用于二维数组。
# 创建一个二维数组
arr_2d = np.arange(16).reshape(4, 4)
print("Original 2D array:\n", arr_2d)
# 水平拆分成 2 个子数组
hsplit_arr = np.hsplit(arr_2d, 2)
print("Horizontally split array:", hsplit_arr)
输出:
riginal 2D array:
[[ 0 1 2 3 ]
?[ 4 5 6 7 ]
?[ 8 9 10 11]
?[12 13 14 15]]
Horizontally split array:
[array([[ 0, 1],
? [ 4, 5],
? [ 8, 9],
? [12, 13]]),
?array([[ 2, 3 ],
? [ 6, 7 ],
? [10, 11],
? [14, 15]])]
np.vsplit
np.vsplit
用于沿数组的垂直轴拆分数组,它也是 np.split
的特殊情况。
# 垂直拆分成 2 个子数组
vsplit_arr = np.vsplit(arr_2d, 2)
print("Vertically split array:", vsplit_arr)
输出:
Vertically split array:
[array([[0, 1, 2, 3],
? [4, 5, 6, 7]]),
?array([[ 8, 9, 10, 11],
? [12, 13, 14, 15]])]
np.array_split
np.array_split
允许进行不等分拆分,即子数组大小可以不一致。
# 创建一个数组
arr = np.arange(7)
print("Original array:", arr)
# 不等分拆分成 3 个子数组
array_split_arr = np.array_split(arr, 3)
print("Array split into 3 parts:", array_split_arr)
输出:
Original array: [0 1 2 3 4 5 6]
Array split into 3 parts:
[array([0, 1, 2]),
?array([3, 4]),
?array([5, 6])]
在 np.split
、np.hsplit
和 np.vsplit
中,您也可以通过一个包含索引的列表来指定拆分的具体位置。
# 创建一个二维数组
arr_2d = np.arange(16).reshape(4, 4)
print("Original 2D array:\n", arr_2d)
# 指定位置水平拆分数组
hsplit_arr_indices = np.hsplit(arr_2d, [3])
print("Horizontally split array at column index 3:", hsplit_arr_indices)
# 指定位置垂直拆分数组
vsplit_arr_indices = np.vsplit(arr_2d, [1])
print("Vertically split array at row index 1:", vsplit_arr_indices)
预期输出:
Original 2D array:
[[ 0 1 2 3]
?[ 4 5 6 7]
?[ 8 9 10 11]
?[12 13 14 15]]
Horizontally split array at column index 3:
[array([[ 0, 1, 2],
? [ 4, 5, 6],
? [ 8, 9, 10],
? [12, 13, 14]]),
?array([[ 3],
? [ 7],
? [11],
? [15]])]
Vertically split array at row index 1:
[array([[0, 1, 2, 3]]),
?array([[ 4, 5, 6, 7],
? [ 8, 9, 10, 11],
? [12, 13, 14, 15]])]