插件窝 干货文章 Python中如何用NumPy高效地分割列表?

Python中如何用NumPy高效地分割列表?

数组 分割 NumPy array 530    来源:    2025-03-14

在Python中,使用NumPy库可以高效地分割列表(或数组)。NumPy提供了多种方法来分割数组,以下是一些常用的方法:

1. 使用 numpy.split

numpy.split 函数可以将数组沿指定的轴分割成多个子数组。

import numpy as np

# 创建一个示例数组
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])

# 将数组分割成3个子数组
result = np.split(arr, 3)

print(result)

输出:

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

2. 使用 numpy.array_split

numpy.array_splitnumpy.split 类似,但它允许不均匀的分割。

import numpy as np

# 创建一个示例数组
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])

# 将数组分割成4个子数组,允许不均匀分割
result = np.array_split(arr, 4)

print(result)

输出:

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

3. 使用 numpy.hsplitnumpy.vsplit

  • numpy.hsplit 用于水平分割数组(按列分割)。
  • numpy.vsplit 用于垂直分割数组(按行分割)。
import numpy as np

# 创建一个2D数组
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 水平分割数组
result_hsplit = np.hsplit(arr, 3)

# 垂直分割数组
result_vsplit = np.vsplit(arr, 3)

print("水平分割结果:", result_hsplit)
print("垂直分割结果:", result_vsplit)

输出:

水平分割结果: [array([[1], [4], [7]]), array([[2], [5], [8]]), array([[3], [6], [9]])]
垂直分割结果: [array([[1, 2, 3]]), array([[4, 5, 6]]), array([[7, 8, 9]])]

4. 使用切片

NumPy数组支持Python的切片操作,可以通过切片来分割数组。

import numpy as np

# 创建一个示例数组
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])

# 使用切片分割数组
part1 = arr[:3]  # 前3个元素
part2 = arr[3:6]  # 中间3个元素
part3 = arr[6:]  # 最后3个元素

print("Part 1:", part1)
print("Part 2:", part2)
print("Part 3:", part3)

输出:

Part 1: [1 2 3]
Part 2: [4 5 6]
Part 3: [7 8 9]

5. 使用 numpy.dsplit

numpy.dsplit 用于沿深度方向分割数组(适用于3D数组)。

import numpy as np

# 创建一个3D数组
arr = np.arange(24).reshape(2, 3, 4)

# 沿深度方向分割数组
result = np.dsplit(arr, 2)

print(result)

输出:

[array([[[ 0,  1],
         [ 4,  5],
         [ 8,  9]],

        [[12, 13],
         [16, 17],
         [20, 21]]]), 
 array([[[ 2,  3],
         [ 6,  7],
         [10, 11]],

        [[14, 15],
         [18, 19],
         [22, 23]]])]

总结

  • numpy.splitnumpy.array_split 是最常用的分割方法。
  • numpy.hsplitnumpy.vsplit 适用于2D数组的水平或垂直分割。
  • 切片操作简单且高效,适用于一维数组的分割。
  • numpy.dsplit 适用于3D数组的深度分割。

根据你的具体需求选择合适的方法来高效地分割数组。