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

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

数组 分割 NumPy array 430    来源:    2025-03-13

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

1. 使用numpy.split

numpy.split函数可以将数组分割成多个子数组。

import numpy as np

# 创建一个示例数组
arr = np.arange(10)

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

print(result)

输出:

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

在这个例子中,np.split(arr, [3, 5])表示在索引3和5处将数组分割成3个子数组。

2. 使用numpy.array_split

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

import numpy as np

# 创建一个示例数组
arr = np.arange(10)

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

print(result)

输出:

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

在这个例子中,数组被分割成4个子数组,即使10不能被4整除,array_split也会尽可能均匀地分配元素。

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.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.split:按指定索引分割数组。
  • numpy.array_split:按指定数量分割数组,允许不均匀分割。
  • numpy.hsplit:水平分割数组(按列)。
  • numpy.vsplit:垂直分割数组(按行)。
  • numpy.dsplit:沿深度方向分割数组(适用于3D数组)。

根据你的需求选择合适的函数来高效地分割数组。