NumPy - 堆叠数组
堆叠 NumPy 数组
在 NumPy 中堆叠数组指的是沿着一个新维度组合多个数组,创建更高维度的数组。这与 concatenation 不同,后者是沿着现有轴组合数组,而不添加新维度。
NumPy 提供了几个函数来实现堆叠。它们如下 −
- 使用 numpy.stack() 函数
- 使用 numpy.vstack() 函数
- 使用 numpy.hstack() 函数
- 使用 numpy.dstack() 函数
- 使用 numpy.column_stack() 函数
使用 stack() 函数堆叠数组
我们可以使用 NumPy 中的 stack() 函数沿着新轴堆叠一系列数组,在结果中创建一个新维度。
与 numpy.concatenate() 函数不同,后者沿着现有轴组合数组,numpy.stack() 函数会在指定位置为被堆叠的数组添加一个新轴。
以下是 NumPy 中 stack() 函数的语法 −
np.stack(arrays, axis=0)
其中,
arrays − 要堆叠的数组序列。
axis − 沿着该轴堆叠数组。默认为 0,会添加一个新的第一个轴。
示例:堆叠 1D 数组
在下面的示例中,我们使用 numpy.stack() 函数沿着新轴(axis 0)堆叠三个 1D 数组,结果是一个 2D 数组 −
import numpy as np
# arrays
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr3 = np.array([7, 8, 9])
# Stack arrays along a new axis
stacked_arr = np.stack((arr1, arr2, arr3), axis=0)
print("Stacked Array along a new axis (Axis 0):")
print(stacked_arr)
以下是获得的结果 −
Stacked Array along a new axis (Axis 0): [[1 2 3] [4 5 6] [7 8 9]]
示例:更改轴
numpy.stack() 函数中的 "axis" 参数决定了新轴插入的位置。通过更改 axis 的值,您可以控制数组的堆叠方式 −
import numpy as np
# arrays
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr3 = np.array([7, 8, 9])
# Stack arrays along axis 1
stacked_arr = np.stack((arr1, arr2, arr3), axis=1)
print("Stacked Array along Axis 1:")
print(stacked_arr)
这将产生以下结果 −
Stacked Array along Axis 1: [[1 4 7] [2 5 8] [3 6 9]]
示例:堆叠多维数组
numpy.stack() 函数也可以用于堆叠多维数组。该函数会为更高维度的数组添加一个新轴,并相应地堆叠它们。
在这里,我们正在堆叠两个 2D 数组 −
import numpy as np
# 2D arrays
arr1 = np.array([[1, 2],
[3, 4]])
arr2 = np.array([[5, 6],
[7, 8]])
# Stack arrays along a new axis
stacked_arr = np.stack((arr1, arr2), axis=0)
print("Stacked 2D Arrays along a new axis (Axis 0):")
print(stacked_arr)
以上代码的输出如下 −
Stacked 2D Arrays along a new axis (Axis 0): [[[1 2] [3 4]] [[5 6] [7 8]]]
使用 column_stack() 函数堆叠数组
NumPy 中的 numpy.column_stack() 函数用于将 1D 数组作为列堆叠成 2D 数组,或者将 2D 数组按列堆叠。该函数提供了一种沿第二轴(axis=1)组合数组的方法,有效增加结果数组的列数。
以下是其语法 −
np.column_stack(tup)
其中,tup 是要堆叠的数组元组。这些数组可以是 1D 或 2D,但必须具有相同的行数。
示例:将 1D 数组作为列堆叠
在下面的示例中,我们使用 NumPy 的 column_stack() 函数将两个 1D 数组作为列堆叠成一个 2D 数组 −
import numpy as np
# 1D 数组
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
# 按列堆叠 1D 数组
stacked_arr_1d = np.column_stack((arr1, arr2))
print("将 1D 数组堆叠为 2D 数组:")
print(stacked_arr_1d)
输出结果如下所示 −
将 1D 数组堆叠为 2D 数组: [[1 4] [2 5] [3 6]]
示例:按列堆叠 2D 数组
在此,我们使用 NumPy 的 column_stack() 函数按列堆叠两个 2D 数组 −
import numpy as np
# 2D 数组
arr3 = np.array([[1, 2],
[3, 4]])
arr4 = np.array([[5, 6],
[7, 8]])
# 按列堆叠 2D 数组
stacked_arr_2d = np.column_stack((arr3, arr4))
print("按列堆叠 2D 数组:")
print(stacked_arr_2d)
得到以下输出 −
按列堆叠 2D 数组: [[1 2 5 6] [3 4 7 8]]
垂直堆叠
我们还可以使用 NumPy 中的 vstack() 函数垂直(按行)堆叠数组。这相当于使用 numpy.concatenate() 函数并指定 “axis=0”,即沿第一轴连接数组。
这将生成一个行数增加的数组,按行组合多个数组。以下是其语法 −
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() 函数水平(按列)堆叠数组。这相当于使用 numpy.concatenate() 函数并指定 “axis=1”,即对于 2D 数组沿第二轴连接。
这将生成一个列数增加的数组,按列组合多个数组。以下是其语法 −
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() 函数用于沿第三个维度(也称为深度维度)堆叠数组。这会按深度方式组合数组,从而在结果数组中创建一个新维度。
当您想将多个 2D 数组组合成单个 3D 数组时,它特别有用。以下是其语法 −
np.dstack(tup)
其中,tup 是要沿第三个维度堆叠的数组元组。所有数组在前两个维度必须具有相同的形状。
示例
在本示例中,我们使用 NumPy dstack() 函数沿第三个维度堆叠两个数组 −
import numpy as np
# arrays
arr1 = np.array([[1, 2],
[3, 4]])
arr2 = np.array([[5, 6],
[7, 8]])
# Stack arrays along the third dimension
stacked_arr = np.dstack((arr1, arr2))
print("Depth-wise Stacked Array:")
print(stacked_arr)
产生的结果如下 −
Depth-wise Stacked Array: [[[1 5] [2 6]] [[3 7] [4 8]]]