NumPy - 数组连接



连接 NumPy 数组

连接 NumPy 数组是指跨不同维度和轴线组合两个或多个数组以创建一个新数组。这对于根据需要垂直(沿行)或水平(沿列)组合数组非常有用。

可以使用 NumPy 模块中提供的 concatenate() 函数在 Numpy 中连接数组。

concatenate() 函数

NumPy 中的 concatenate() 函数用于沿指定轴连接(组合)数组。它允许你根据提供的 axis 参数沿行或列组合数组。以下是语法:

numpy.concatenate((a1, a2, ...), axis=0, out=None)

其中,

  • a1, a2, ... − 这些是要连接的数组序列。这些数组除了由 axis 指定的轴之外,必须在所有轴上具有相同的形状。默认为 0(沿行)。使用 1 沿列连接。

  • axis − 指定沿哪个轴连接数组。

  • out(可选)− 这允许你指定一个输出数组,连接结果将存储在其中。

沿行连接数组

在 NumPy 中沿行连接数组意味着垂直堆叠数组,将一个数组放在另一个数组的顶部以创建一个更大的数组。这对于组合数据集或垂直扩展数据很有用。

在 NumPy 中,可以使用 numpy.concatenate() 函数并将“axis”参数设置为“0”来实现此目的。

示例

在以下示例中,我们使用 numpy.concatenate() 函数沿行连接两个 NumPy 数组“arr1”和“arr2”:

import numpy as np

arr1 = np.array([[1, 2, 3],
                 [4, 5, 6]])

arr2 = np.array([[7, 8, 9],
                 [10, 11, 12]])

# Concatenate along rows
concatenated_arr = np.concatenate((arr1, arr2), axis=0)
print("Concatenated Array along rows:",concatenated_arr)

获得以下输出:

Concatenated Array along rows:
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]

沿列连接数组

我们还可以通过水平堆叠数组在 NumPy 中沿列连接数组,将一个数组放在另一个数组旁边以水平扩展数据。这对于组合数据集很有用,其中每个数组表示需要连接的数据列。

在 NumPy 中,可以使用 numpy.concatenate() 函数并将“axis”参数设置为“1”来实现此目的。

示例

在下面的示例中,我们使用 numpy.concatenate() 函数沿列连接两个 NumPy 数组“arr1”和“arr2”:

import numpy as np

# Create two arrays
arr1 = np.array([[1, 2],
                 [3, 4]])

arr2 = np.array([[5, 6],
                 [7, 8]])

# Concatenate along columns 
concatenated_arr = np.concatenate((arr1, arr2), axis=1)
print("Concatenated Array along columns:")
print(concatenated_arr)

这将产生以下结果:

Concatenated Array along columns:
[[1 2 5 6]
 [3 4 7 8]]

连接具有混合维度的数组

在 NumPy 中连接具有混合维度的数组涉及组合最初具有不同形状的数组。

为了实现这一点,我们使用广播技术来调整数组的形状,以便它们与连接兼容。这涉及扩展较小数组的维度以沿连接轴与较大数组匹配。

在 NumPy 中,可以使用 np.reshape()、np.expand_dims() 和切片等函数调整数组的维度。

示例:连接 1D 数组和 2D 数组

让我们考虑连接一个 1D 数组和一个 2D 数组。1D 数组将沿适当的维度扩展以匹配 2D 数组:

import numpy as np

# Create a 1D array
arr1 = np.array([1, 2, 3])

# Create a 2D array
arr2 = np.array([[4, 5, 6],
                 [7, 8, 9]])

# Expand dimensions of the 1D array to match the 2D array for concatenation along rows
expanded_arr1 = np.expand_dims(arr1, axis=0)

# Concatenate along rows (axis=0)
concatenated_arr = np.concatenate((expanded_arr1, arr2), axis=0)
print("Concatenated Array with Mixed Dimensions along rows:")
print(concatenated_arr)

以上代码的输出如下:

Concatenated Array with Mixed Dimensions along rows:
[[1 2 3]
 [4 5 6]
 [7 8 9]]
 

示例:连接 2D 数组和 3D 数组

如果你有更多维度的数组,你可以类似地扩展它们的维度以相互匹配。例如,连接 2D 数组和 3D 数组涉及扩展 2D 数组的维度:

import numpy as np

# Create a 2D array
arr1 = np.array([[1, 2],
                 [3, 4]])

# Create a 3D array
arr2 = np.array([[[5, 6],
                  [7, 8]],
                 
                 [[9, 10],
                  [11, 12]]])

# Expand dimensions of the 2D array to match the 3D array for concatenation along the third dimension (axis=2)
expanded_arr1 = np.expand_dims(arr1, axis=2)

# Concatenate along the third dimension (axis=2)
concatenated_arr = np.concatenate((expanded_arr1, arr2), axis=2)
print("Concatenated Array with Mixed Dimensions along axis=2:")
print(concatenated_arr)

获得的输出如下所示:

Concatenated Array with Mixed Dimensions along axis=2:
[[[ 1  5  6]
  [ 2  7  8]]

 [[ 3  9 10]
  [ 4 11 12]]]

沿特定轴连接数组

你可以使用 concatenate() 函数的 axis 参数沿“0”和“1”以外的轴连接数组。此参数确定将沿哪个维度连接数组。通过更改 axis 的值,你可以控制数组是沿行、列还是更高维度连接。

对于具有两个以上维度的数组,你可以指定更高的轴进行连接。例如,沿第三轴(axis=2)连接涉及沿其深度组合数组。

示例

在以下示例中,我们沿第三维度连接两个 3D 数组:

import numpy as np

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

arr2 = np.array([[[9, 10],
                  [11, 12]],
                 
                 [[13, 14],
                  [15, 16]]])

# Concatenate along the third dimension (axis=2)
result = np.concatenate((arr1, arr2), axis=2)
print("Concatenated along third dimension:")
print(result)

执行以上代码后,我们将获得以下输出:

Concatenated along third dimension:
[[[ 1  2  9 10]
  [ 3  4 11 12]]

 [[ 5  6 13 14]
  [ 7  8 15 16]]]

使用 stack() 函数连接数组

NumPy stack() 函数也可用于沿新轴连接数组。与 numpy.concatenate() 沿现有轴连接数组不同,numpy.stack() 会添加一个额外的维度,在结果中创建一个新轴。以下是语法:

numpy.stack(arrays, axis=0)

其中,

  • arrays − 要堆叠的数组序列。所有数组必须具有相同的形状。

  • axis − 沿哪个轴堆叠数组。默认为 0。

示例

在下面的示例中,我们使用 NumPy stack() 函数沿新的第三轴(axis=2)堆叠两个 2D 数组:

import numpy as np

# Example 2D arrays
arr1 = np.array([[1, 2],
                 [3, 4]])

arr2 = np.array([[5, 6],
                 [7, 8]])

# Stack along a new third axis 
result = np.stack((arr1, arr2), axis=2)
print("Stacked along a new axis:")
print(result)

产生的结果如下:

Stacked along a new axis:
[[[1 5]
  [2 6]]

 [[3 7]
  [4 8]]]
广告