商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Numpy数组拆分的实现步骤

Numpy数组拆分的实现步骤

  发布于2026-07-18 阅读(0)

扫一扫,手机访问

数组拆分,说白了就是把一个数组按照指定的“切点”或“等份”切成若干小块。在 NumPy 里,主力函数是 numpy.splitnumpy.hsplitnumpy.vsplit,以及它们的不等分兄弟 numpy.array_split。下面就直接上干货,看看每种怎么用。

Numpy数组拆分的实现步骤

np.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.splitaxis=1 时的快捷方式。

# 创建一个二维数组 
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.splitaxis=0 时的快捷方式。

# 垂直拆分成 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.splitnp.hsplitnp.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]])]

本文转载于:https://www.jb51.net/python/362296rj0.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注