NumPy 怎么堆叠数组?numpy array stack concatenate 数组拼接方法有哪些?

文章导读
Previous Quiz Next 堆叠 NumPy 数组 在 NumPy 中堆叠数组指的是沿着一个新维度组合多个数组,创建更高维度的数组。这与 concatenation 不同,后者是沿着现有轴组合数组,而不添加新维度。
📋 目录
  1. 堆叠 NumPy 数组
  2. 使用 stack() 函数堆叠数组
  3. 使用 column_stack() 函数堆叠数组
  4. 垂直堆叠
  5. 水平堆叠
  6. 深度堆叠
A A

NumPy - 堆叠数组



Previous
Quiz
Next

堆叠 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]]]