NumPy - 堆叠数组
堆叠 NumPy 数组
NumPy 中的堆叠数组是指沿新维度组合多个数组,从而创建更高维度的数组。这与串联不同,串联是沿现有轴组合数组,而不添加新维度。
NumPy 提供了多个函数来实现堆叠。它们如下:
- 使用 numpy.stack() 函数
- 使用 numpy.vstack() 函数
- 使用 numpy.hstack() 函数
- 使用 numpy.dstack() 函数
- 使用 numpy.column_stack() 函数
使用 stack() 函数堆叠数组
我们可以使用 NumPy 中的 stack() 函数沿新轴堆叠一系列数组,从而在结果中创建一个新的维度。
与沿现有轴组合数组的 numpy.concatenate() 函数不同,numpy.stack() 函数会在堆叠数组的指定位置添加一个新轴。
以下是 stack() 函数的语法NumPy −
np.stack(arrays, axis=0)
其中,
arrays − 需要堆叠的数组序列。
axis − 堆叠数组所沿的轴。默认值为 0,表示添加新的第一轴。
示例:堆叠一维数组
在下面的示例中,我们使用 numpy.stack() 函数沿新轴(轴 0)堆叠三个一维数组,得到一个二维数组 -
import numpy as np # 数组 arr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) arr3 = np.array([7, 8, 9]) # 沿新轴堆叠数组 stacked_arr = np.stack((arr1, arr2, arr3), axis=0) print("沿新轴堆叠的数组新轴(轴 0):") print(stacked_arr)
以下是获得的输出 −
沿新轴(轴 0)堆叠的数组: [[1 2 3] [4 5 6] [7 8 9]]
示例:更改轴
numpy.stack() 函数中的 "axis" 参数决定新轴的插入位置。通过更改轴的值,您可以控制数组的堆叠方式 -
import numpy as np # 数组 arr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) arr3 = np.array([7, 8, 9]) # 沿轴 1 堆叠数组 stacked_arr = np.stack((arr1, arr2, arr3), axis=1) print("沿轴 1 堆叠的数组:") print(stacked_arr)
这将产生以下结果 -
沿轴 1 堆叠的数组: [[1 4 7] [2 5 8] [3 6 9]]
示例:堆叠多维数组
numpy.stack() 函数也可用于堆叠多维数组。该函数会为高维数组添加一个新轴,并相应地堆叠它们。
在这里,我们堆叠了两个二维数组 -
import numpy as np # 二维数组 arr1 = np.array([[1, 2], [3, 4]]) arr2 = np.array([[5, 6], [7, 8]]) # 沿新轴堆叠数组 stacked_arr = np.stack((arr1, arr2), axis=0) print("沿新轴(轴 0)堆叠的二维数组:") print(stacked_arr)
以下是上述代码的输出 -
沿新轴(轴 0)堆叠的二维数组: [[[1 2] [3 4]] [[5 6] [7 8]]]
使用 column_stack() 堆叠数组函数
NumPy 中的 numpy.column_stack() 函数用于将一维数组按列堆叠成二维数组,或按列堆叠二维数组。此函数提供了一种沿第二个轴 (axis=1) 组合数组的方法,从而有效地增加了结果数组的列数。
语法如下:
np.column_stack(tup)
其中,tup 是要堆叠的数组的元组。数组可以是一维数组,也可以是二维数组,但行数必须相同。
示例:将一维数组堆叠为列
在下面的示例中,我们使用 NumPy 的 column_stack() 函数将两个一维数组作为列堆叠成一个二维数组 -
import numpy as np # 一维数组 arr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) # 列堆叠一维数组 stacked_arr_1d = np.column_stack((arr1, arr2)) print("堆叠的一维数组作为二维数组array:") print(stacked_arr_1d)
我们得到如下所示的输出 -
堆叠的一维数组转换为二维数组: [[1 4] [2 5] [3 6]]
示例:按列堆叠二维数组
在这里,我们使用 NumPy 的 column_stack() 函数按列堆叠两个二维数组 -
import numpy as np # 二维数组 arr3 = np.array([[1, 2], [3, 4]]) arr4 = np.array([[5, 6], [7, 8]]) # 列堆叠二维数组 stacked_arr_2d = np.column_stack((arr3, arr4)) print("按列堆叠的二维数组:") print(stacked_arr_2d)
以下是得到的输出 -
按列堆叠的二维数组: [[1 2 5 6] [3 4 7 8]]
垂直堆叠
我们也可以使用 NumPy 中的 vstack() 函数垂直(按行)堆叠数组。这相当于使用带有"axis=0"的 numpy.concatenate() 函数,其中数组沿第一个轴连接。
这将导致行数增加的数组,并按行合并多个数组。语法如下:
numpy.vstack(tup)
其中,tup 是要垂直堆叠的数组元组。所有数组的列数必须相同。
示例
在下面的示例中,我们使用 NumPy 的 vstack() 函数垂直堆叠两个数组 -
import numpy as np # 数组 arr1 = np.array([[1, 2, 3], [4, 5, 6]]) arr2 = np.array([[7, 8, 9], [10, 11, 12]]) # 垂直堆叠数组 stacked_arr = np.vstack((arr1, arr2)) print("垂直堆叠数组:") print(stacked_arr)
输出结果如下 -
垂直堆叠数组: [[ 1 2 3] [ 4 5 6] [ 7 8 9] [10 11 12]]
水平堆叠
我们可以使用 NumPy 中的 hstack() 函数水平(按列)堆叠数组。它相当于使用带有"axis=1"的 numpy.concatenate() 函数,其中数组沿二维数组的第二个轴连接。
这将导致数组的列数增加,并按列合并多个数组。语法如下:
numpy.hstack(tup)
其中,tup 是要水平堆叠的数组元组。所有数组的行数必须相同。
示例
在下面的示例中,我们使用 NumPy hstack() 函数水平堆叠两个数组:
import numpy as np # 数组 arr1 = np.array([[1, 2], [3, 4]]) arr2 = np.array([[5, 6], [7, 8]]) # 水平堆叠数组 stacked_arr = np.hstack((arr1, arr2)) print("水平堆叠数组:") print(stacked_arr)
执行上述代码后,我们得到以下输出 -
水平堆叠数组: [[1 2 5 6] [3 4 7 8]]
深度堆叠
numpy.dstack() 函数用于沿第三维度(也称为深度维度)堆叠数组。这会按深度组合数组,从而有效地在结果数组中创建一个新的维度。
当您想要将多个二维数组组合成一个三维数组时,它特别有用。语法如下:-
np.dstack(tup)
其中,tup 是要沿第三维堆叠的数组元组。所有数组的前两个维度必须具有相同的形状。
示例
在此示例中,我们使用 NumPy dstack() 函数沿第三维堆叠两个数组:-
import numpy as np # 数组 arr1 = np.array([[1, 2], [3, 4]]) arr2 = np.array([[5, 6], [7, 8]]) # 沿第三维堆叠数组 stacked_arr = np.dstack((arr1, arr2)) print("深度堆叠数组:") print(stacked_arr)
结果如下 −
深度堆叠数组: [[[1 5] [2 6]] [[3 7] [4 8]]]