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() 函数将数组 "arr" 沿列(axis=1)拆分成 3 个大小相等的子数组 -
import numpy as np # 数组 arr = np.arange(9).reshape(3, 3) # 拆分成 3 个大小相等的子数组 split_arr = np.split(arr, 3, axis=1) print("原始数组:") print(arr) print(" 沿轴 1 拆分成 3 个大小相等的子数组:") for sub_arr in split_arr: print(sub_arr)
以下是得到的输出 -
原始数组: [[0 1 2] [3 4 5] [6 7 8]] 沿轴 1 拆分为 3 个相等的子数组: [[0] [3] [6]] [[1] [4] [7]] [[2] [5] [8]]
示例:在特定索引处拆分
这里,我们使用 NumPy 中的 split() 函数沿行(axis=0)在索引 [1, 2] 处拆分数组 -
import numpy as np # 数组 arr = np.arange(9).reshape(3, 3) # 在指定索引处拆分数组 split_arr = np.split(arr, [1, 2], axis=0) print(" 沿轴 0 在索引 [1, 2] 处拆分:") for sub_arr in split_arr: print(sub_arr)
这将产生以下结果 -
沿轴 0 在索引 [1, 2] 处拆分: [[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 # 数组 arr = np.arange(10) # 沿轴 0 拆分为 3 个子数组 split_arr = np.array_split(arr, 3) print("原始数组:") print(arr) print(" 拆分为 3 个不相等的子数组:") for sub_arr in split_arr: print(sub_arr)
以下是上述代码的输出 -
原始数组: [0 1 2 3 4 5 6 7 8 9] 拆分为 3 个不相等的子数组: [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"沿其列拆分为两个相等的部分。-
import numpy as np # 二维数组 arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) # 沿轴 1 分割成两等份 split_arr = np.hsplit(arr, 2) print("原始数组:") print(arr) print(" 沿轴 1 分割成两等份:") for sub_arr in split_arr: print(sub_arr)
执行上述代码后,我们得到以下输出 -
原始数组:[[1 2 3 4] [5 6 7 8]] 沿轴 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 # 二维数组 arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 沿轴 0 分割成 3 个相等的部分 split_arr = np.vsplit(arr, 3) print("原始数组:") print(arr) print(" 沿轴 0 分割成 3 个相等的部分:") for sub_arr in split_arr: print(sub_arr)
输出结果如下 -
原始数组: [[1 2 3] [4 5 6] [7 8 9]] 沿轴 0 分割成 3 个相等的部分: [[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 # 三维数组示例 arr = np.arange(24).reshape((2, 3, 4)) # 沿轴 2(深度)拆分为四个相等的部分 split_arr = np.dsplit(arr, 4) print("原始数组:") print(arr) print(" 沿轴 2 拆分为四个相等的部分(深度):") for sub_arr in split_arr: print(sub_arr) print()
结果如下 -
原始数组: [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] 沿轴 2(深度)拆分为 4 个相等的部分: [[[ 0] [ 4] [ 8]] [[12] [16] [20]]] [[[ 1] [ 5] [ 9]] [[13] [17] [21]]] [[[ 2] [ 6] [10]] [[14] [18] [22]]] [[[ 3] [ 7] [11]] [[15] [19] [23]]]