NumPy - 连接数组
连接 NumPy 数组
连接 NumPy 数组是指将两个或多个跨不同维度和轴的数组组合起来创建一个新数组。这有利于根据需要垂直(沿行)或水平(沿列)组合数组。
在 NumPy 中,您可以使用 NumPy 模块中的 concatenate() 函数连接数组。
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]]) # 沿行连接 concatenated_arr = np.concatenate((arr1, arr2), axis=0) print("沿行连接数组:",concatenated_arr)
以下是得到的输出 −
沿行连接数组: [[ 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 # 创建两个数组 arr1 = np.array([[1, 2], [3, 4]]) arr2 = np.array([[5, 6], [7, 8]]) # 沿列连接 concatenated_arr = np.concatenate((arr1, arr2), axis=1) print("沿列连接数组:") print(concatenated_arr)
这将产生以下结果 -
沿列连接数组: [[1 2 5 6] [3 4 7 8]]
连接混合维度数组
在 NumPy 中连接混合维度数组需要合并最初形状不同的数组。
为了实现这一点,我们使用广播技术来调整数组的形状,使其适合连接。这涉及扩展较小数组的维度,使其沿连接轴与较大数组匹配。
在 NumPy 中,可以使用 np.reshape()、np.expand_dims() 和切片等函数调整数组的维度。
示例:将一维数组与二维数组连接
我们来考虑将一维数组与二维数组连接起来。一维数组将沿相应维度扩展,以匹配二维数组 -
import numpy as np # 创建一维数组 arr1 = np.array([1, 2, 3]) # 创建二维数组 arr2 = np.array([[4, 5, 6], [7, 8, 9]]) # 扩展一维数组的维度,使其与二维数组匹配,以便沿行进行连接 expanded_arr1 = np.expand_dims(arr1, axis=0) # 沿行连接 (axis=0) concatenated_arr = np.concatenate((expanded_arr1, arr2), axis=0) print("沿行连接混合维度数组rows:") print(concatenated_arr)
以下是上述代码的输出 -
沿行连接混合维度数组: [[1 2 3] [4 5 6] [7 8 9]]
示例:连接二维数组和三维数组
如果您有更多维度的数组,您可以类似地扩展它们的维度以使其相互匹配。例如,连接二维数组和三维数组需要扩展二维数组的维度 -
import numpy as np # 创建二维数组 arr1 = np.array([[1, 2], [3, 4]]) # 创建三维数组 arr2 = np.array([[[5, 6], [7, 8]], [[9, 10], [11, 12]]]) # 扩展二维数组的维度,使其与三维数组匹配,以便沿第三维 (axis=2) 进行连接 expanded_arr1 = np.expand_dims(arr1, axis=2) # 沿第三维 (axis=2) 进行连接 concatenated_arr = np.concatenate((expanded_arr1, arr2), axis=2) print("沿 axis=2 连接混合维度数组:") print(concatenated_arr)
输出结果如下 -
沿 axis=2 连接混合维度数组: [[[ 1 5 6] [ 2 7 8]] [[ 3 9 10] [ 4 11 12]]]
沿特定维度连接数组轴
您可以使用 concatenate() 函数的 axis 参数沿除"0"和"1"之外的轴连接数组。此参数确定数组连接的维度。通过更改 axis 的值,您可以控制数组是沿行、列还是更高维度连接。
对于超过两个维度的数组,您可以指定更高维度的轴进行连接。例如,沿第三个轴 (axis=2) 连接涉及沿其深度组合数组。
示例
在以下示例中,我们将沿第三个维度连接两个三维数组 -
import numpy as np # 三维数组 arr1 = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) arr2 = np.array([[[9, 10], [11, 12]], [[13, 14], [15, 16]]]) # 沿第三维 (axis=2) 连接 result = np.concatenate((arr1, arr2), axis=2) print("沿第三维连接:") print(result)
执行上述代码后,我们得到以下输出 -
沿第三维连接: [[[ 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) 堆叠两个二维数组 -
import numpy as np # 二维数组示例 arr1 = np.array([[1, 2], [3, 4]]) arr2 = np.array([[5, 6], [7, 8]]) # 沿新的第三轴堆叠 result = np.stack((arr1, arr2), axis=2) print("沿新轴堆叠:") print(result)
结果如下 −
沿新轴堆叠: [[[1 5] [2 6]] [[3 7] [4 8]]]