NumPy - 交换数组的列
在 NumPy 中交换数组的列
在 NumPy 数组中交换列是指交换数组中两列或多列的位置。此操作可对一维数组和多维数组执行。
交换列的主要方法包括切片和索引,这允许您根据需要访问和重新排列列。
使用索引交换列
使用索引交换 NumPy 数组中的列是一种技术,您可以通过根据索引选择和重新分配特定列来更改二维数组中列的顺序。
示例
在以下示例中,我们使用索引交换二维 NumPy 数组的"第一列"和"最后一列" -
import numpy as np # 创建二维 NumPy 数组 arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 交换首列和末列 arr[:, [0, 2]] = arr[:, [2, 0]] print("交换列后的数组:") print(arr)
以下是得到的输出 −
交换列后的数组: [[3 2 1] [6 5 4] [9 8 7]]
交换多列
交换 NumPy 数组中的多列是指同时更改两列以上列的顺序。该过程使用高级索引来指定要交换的列及其新位置。
示例
在此示例中,我们交换二维数组的三列,第一列移动到第三个位置,第二列移动到第一个位置,第三列移动到第二个位置 -
import numpy as np # 创建二维数组 arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 按以下顺序交换列:从第一列到第三列,从第二列到第一列,从第三列到第二列 arr[:, [0, 1, 2]] = arr[:, [1, 2, 0]] print("交换列后的数组:") print(arr)
这将产生以下结果 -
交换列后的数组: [[2 3 1] [5 6 4] [8 9 7]]
交换三维数组中的列
在 NumPy 中交换三维数组中的列需要沿着数组的某个轴重新排列元素,通常是第二个轴(轴 1),这对应于处理三维切片时的列数组。
示例
在下面的示例中,我们沿三维数组的第二个轴(轴 2)交换第一列和最后一列。数组沿前两个轴进行切片,并对第三个轴进行索引以执行列交换 -
import numpy as np # 创建三维 NumPy 数组 arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]) # 沿第二轴交换第一列和最后一列 arr[:, :, [0, 2]] = arr[:, :, [2, 0]] print("交换列后的三维数组:") print(arr)
以下是上述代码的输出 -
交换列后的三维数组: [[[ 3 2 1] [ 6 5 4]] [[ 9 8 7] [12 11 10]]]
交换非相邻列
在 NumPy 数组中交换非相邻列是指重新排列彼此不直接相邻的列。
此操作可在二维和三维数组中执行,并使用高级索引技术来指定哪些列进行交换。
示例
在以下示例中,我们使用高级索引交换二维 NumPy 数组中不相邻的列,即第一列和第三列 -
import numpy as np # 创建二维数组 arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) # 交换第一列(索引 0)和第三列(索引 2) arr[:, [0, 2]] = arr[:, [2, 0]] print("交换非相邻列后的数组:") print(arr)
输出结果如下 -
交换非相邻列后的数组: [[ 3 2 1 4] [ 7 6 5 8] [11 10 9 12]]
交换结构化数组中的列
要在结构化数组中交换列,我们需要在保持每条记录完整性的同时重新排列结构化数组中的字段。
NumPy 中的结构化数组允许定义具有异构数据类型的数组,并且数组的每个元素可以包含多个字段。
示例
在本例中,我们使用基于字段的索引交换结构化 NumPy 数组中的"A"列和"C"列 -
import numpy as np # 创建结构化数组 dtype = [('A', 'i4'), ('B', 'i4'), ('C', 'i4')] arr = np.array([(1, 2, 3), (4, 5, 6), (7, 8, 9)], dtype=dtype) # 交换"A"列和"C"列 arr[['A', 'C']] = arr[['C', 'A']] print("交换列后的结构化数组'A' 和 'C':") print(arr)
执行上述代码后,我们得到以下输出 -
交换列 'A' 和 'C' 后的结构化数组: [(3, 2, 1) (6, 5, 4) (9, 8, 7)]
使用 swapaxes() 函数交换列
我们可以使用 np.swapaxes() 函数进行涉及多个轴的更复杂的操作。此函数允许您交换数组的两个指定轴,这在高维数组中尤其有用。
以下是语法 -
numpy.swapaxes(a, axis1, axis2)
其中,
- a: 需要交换轴的输入数组。
- axis1: 需要交换的第一个轴。
- axis2: 需要交换的第二个轴。
示例
在下面的示例中,我们使用 np.swapaxes() 函数交换第二和第三个轴,从而有效地对三维数组中的列进行重新排序 -
导入 numpy 为 np # 创建三维 NumPy 数组 arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]) # 交换轴 1 和轴 2 arr_swapped = np.swapaxes(arr, 1, 2) print("交换轴后的三维数组:") print(arr_swapped)
结果如下 −
交换轴后的三维数组: [[[ 1 4] [ 2 5] [ 3 6]] [[ 7 10] [ 8 11] [ 9 12]]]