NumPy - 数组分割



分割 NumPy 数组

在 NumPy 中分割数组是将单个数组分成多个子数组的一种方法。这可以沿任何轴进行,具体取决于您希望如何划分数据。NumPy 提供了多种函数以不同的方式分割数组。如下所示 -

  • 使用 numpy.split() 函数
  • 使用 numpy.array_split() 函数
  • 使用 numpy.hsplit() 函数
  • 使用 numpy.vsplit() 函数
  • 使用 numpy.dsplit() 函数

使用 split() 函数分割数组

我们可以在 NumPy 中使用 split() 函数将数组沿指定轴分割成多个子数组。数组根据提供的索引进行划分。以下是语法 -

numpy.split(array, indices_or_sections, axis=0)

其中,

  • array − 要分割的输入数组。

  • indices_or_sections − 这可以是整数或排序整数的一维数组。

    如果为整数,则指定要创建的等大小子数组的数量。数组必须能被此数量的段均匀地整除。

    如果为排序整数的一维数组,则指定分割数组的点。

  • axis − 要沿其分割数组的轴。默认为 0(对于二维数组,沿行分割)。

示例:分割成等大小的子数组

在下面的示例中,我们使用 numpy.split() 函数沿列(axis=1)将数组“arr”分割成 3 个相等的子数组 -

import numpy as np

# array
arr = np.arange(9).reshape(3, 3)

# Split into 3 equal sub-arrays 
split_arr = np.split(arr, 3, axis=1)

print("Original Array:")
print(arr)
print("\nSplit into 3 equal sub-arrays along axis 1:")
for sub_arr in split_arr:
   print(sub_arr)

获得的输出如下 -

Original Array:
[[0 1 2]
 [3 4 5]
 [6 7 8]]

Split into 3 equal sub-arrays along axis 1:
[[0]
 [3]
 [6]]
[[1]
 [4]
 [7]]
[[2]
 [5]
 [8]]

示例:在特定索引处分割

在这里,我们使用 NumPy 中的 split() 函数沿行(axis=0)在索引 [1, 2] 处分割数组 -

import numpy as np

# array
arr = np.arange(9).reshape(3, 3)

# Split array at specified indices
split_arr = np.split(arr, [1, 2], axis=0)

print("\nSplit at indices [1, 2] along axis 0:")
for sub_arr in split_arr:
   print(sub_arr)

这将产生以下结果 -

Split at indices [1, 2] along axis 0:
[[0 1 2]]
[[3 4 5]]
[[6 7 8]]

使用 array_split() 函数分割数组

我们也可以使用 NumPy 中的 array_split() 函数将数组沿指定轴分割成多个子数组。与 numpy.split() 函数不同,array_split() 函数允许不等分割,如果数组不能被均匀地分割。

当数组不能被指定数量的段均匀地整除时,numpy.array_split() 函数确保生成的子数组的大小尽可能相等,并将任何额外的元素分配到前面的子数组。以下是语法 -

numpy.array_split(array, indices_or_sections, axis=0)

其中,

  • array − 要分割的输入数组。

  • indices_or_sections − 这可以是整数或排序整数的一维数组。

    如果为整数,则指定要创建的等大小子数组的数量。数组必须尽可能地被均匀地分割。

    如果为排序整数的一维数组,则指定分割数组的点。

  • axis − 要沿其分割数组的轴。默认为 0(对于二维数组,沿行分割)。

示例

在下面的示例中,我们使用 numpy.array_split() 函数将具有“10”个元素的一维数组分割成 3 个不相等的子数组 -

import numpy as np

# array
arr = np.arange(10)

# Split into 3 sub-arrays along axis 0
split_arr = np.array_split(arr, 3)

print("Original Array:")
print(arr)
print("\nSplit into 3 unequal sub-arrays:")
for sub_arr in split_arr:
   print(sub_arr)

以上代码的输出如下 -

Original Array:
[0 1 2 3 4 5 6 7 8 9]

Split into 3 unequal sub-arrays:
[0 1 2 3]
[4 5 6]
[7 8 9]

水平分割

我们可以使用 NumPy 中的 hsplit() 函数沿水平轴(即对于二维数组,axis = 1)分割数组。此函数沿水平方向将数组分成子数组,有效地分离数据列。以下是语法 -

numpy.hsplit(array, indices_or_sections)

其中,

  • array − 要分割的输入数组。

  • indices_or_sections − 指示如何分割数组的整数或一维索引数组。

示例

在此示例中,我们使用 numpy.hsplit() 函数沿其列将二维数组“arr”分割成 2 个相等的部分 -

import numpy as np

# 2D array
arr = np.array([[1, 2, 3, 4],
                [5, 6, 7, 8]])

# Split into 2 equal parts along axis 1
split_arr = np.hsplit(arr, 2)

print("Original Array:")
print(arr)
print("\nSplit into 2 equal parts along axis 1:")
for sub_arr in split_arr:
   print(sub_arr)

执行以上代码后,我们得到以下输出 -

Original Array:[[1 2 3 4]
 [5 6 7 8]]

Split into 2 equal parts along axis 1:
[[1 2]
 [5 6]]
[[3 4]
 [7 8]]

垂直分割

我们也可以使用 NumPy 中的 vsplit() 函数沿垂直轴(即对于二维数组,axis = 0)分割数组。此函数沿垂直方向将数组分成子数组,有效地分离数据行。以下是语法 -

numpy.vsplit(array, indices_or_sections)

其中,

  • array − 要分割的输入数组。

  • indices_or_sections − 指示如何分割数组的整数或一维索引数组。

示例

在下面的示例中,我们使用 numpy.vsplit() 函数沿其行将二维数组“arr”分割成 3 个相等的部分 -

import numpy as np

# 2D array
arr = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9]])

# Split into 3 equal parts along axis 0
split_arr = np.vsplit(arr, 3)

print("Original Array:")
print(arr)
print("\nSplit into 3 equal parts along axis 0:")
for sub_arr in split_arr:
   print(sub_arr)

获得的输出如下所示 -

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

Split into 3 equal parts along axis 0:
[[1 2 3]]
[[4 5 6]]
[[7 8 9]]

深度分割

numpy.dsplit() 函数用于沿其第三维分割三维数组。此维度通常称为深度维度,对应于 axis=2。以下是语法 -

numpy.dsplit(array, indices_or_sections)

示例

在此示例中,使用 numpy.dsplit() 函数沿其第三维将三维数组“arr”分割成四个相等的部分 -

import numpy as np

# Example 3D array
arr = np.arange(24).reshape((2, 3, 4))

# Split into 4 equal parts along axis 2 (depth)
split_arr = np.dsplit(arr, 4)

print("Original Array:")
print(arr)
print("\nSplit into 4 equal parts along axis 2 (depth):")
for sub_arr in split_arr:
   print(sub_arr)
   print()

产生的结果如下 -

Original Array:
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]

Split into 4 equal parts along axis 2 (depth):
[[[ 0]
  [ 4]
  [ 8]]

 [[12]
  [16]
  [20]]]

[[[ 1]
  [ 5]
  [ 9]]

 [[13]
  [17]
  [21]]]

[[[ 2]
  [ 6]
  [10]]

 [[14]
  [18]
  [22]]]

[[[ 3]
  [ 7]
  [11]]

 [[15]
  [19]
  [23]]]
广告