NumPy - 交换数组的列



在 NumPy 中交换数组的列

在 NumPy 数组中交换列是指交换数组中两列或多列的位置。此操作可以对一维和多维数组执行。

交换列的主要方法涉及**切片**和**索引**,这允许您根据需要访问和重新排列列。

使用索引交换列

使用索引在 NumPy 数组中交换列是一种技术,通过根据索引选择和重新分配特定列来更改二维数组中列的顺序。

示例

在下面的示例中,我们使用索引交换二维 NumPy 数组的“第一”列和“最后一”列:

import numpy as np

# Creating a 2D NumPy array
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# Swapping the first and last columns
arr[:, [0, 2]] = arr[:, [2, 0]]

print("Array after swapping columns:")
print(arr)

以下是获得的输出:

Array after swapping columns:
[[3 2 1]
 [6 5 4]
 [9 8 7]]

交换多列

在 NumPy 数组中交换多列涉及同时更改两列以上列的顺序。该过程使用高级索引来指定要交换的列及其新位置。

示例

在这个例子中,我们交换二维数组的三列,第一列移到第三个位置,第二列移到第一个位置,第三列移到第二个位置:

import numpy as np

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

# Swap columns in the order: 1st to 3rd, 2nd to 1st, 3rd to 2nd
arr[:, [0, 1, 2]] = arr[:, [1, 2, 0]]

print("Array after swapping columns:")
print(arr)

这将产生以下结果:

Array after swapping columns:
[[2 3 1]
 [5 6 4]
 [8 9 7]]

交换三维数组中的列

在 NumPy 中交换三维数组中的列涉及重新排列数组沿其一个轴上的元素,通常是**第二个轴**(轴 1),在处理三维数组的切片时,它对应于列。

示例

在下面的示例中,我们沿着三维数组的第二个轴(轴 2)交换第一列和最后一列。数组沿着前两个轴切片,第三个轴被索引以执行列交换:

import numpy as np

# Creating a 3D NumPy array
arr = np.array([[[1, 2, 3], [4, 5, 6]], 
                [[7, 8, 9], [10, 11, 12]]])

# Swapping the first and last columns along the second axis
arr[:, :, [0, 2]] = arr[:, :, [2, 0]]

print("3D array after swapping columns:")
print(arr)

以上代码的输出如下:

3D array after swapping columns:
[[[ 3  2  1]
 [ 6  5  4]]
[[ 9  8  7]
 [12 11 10]]]

交换非相邻列

在 NumPy 数组中交换非相邻列是指重新排列不直接相邻的列。

此操作可以在二维和三维数组中执行,它使用高级索引技术来指定要交换的列。

示例

在下面的示例中,我们使用高级索引在二维 NumPy 数组中交换非相邻列,即第一列和第三列:

import numpy as np

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

# Swap the first (index 0) and third (index 2) columns
arr[:, [0, 2]] = arr[:, [2, 0]]

print("Array after swapping non-adjacent columns:")
print(arr)

获得的输出如下所示:

Array after swapping non-adjacent columns:
[[ 3  2  1  4]
 [ 7  6  5  8]
 [11 10  9 12]]

交换结构化数组中的列

要交换结构化数组中的列,我们需要重新排列结构化数组中的字段,同时保持每个记录的完整性。

NumPy 中的结构化数组允许您定义具有异构数据类型的数组,并且数组的每个元素可以包含多个字段。

示例

在这个例子中,我们使用基于字段的索引在结构化 NumPy 数组中交换列“A”和“C”:

import numpy as np

# Create a structured array
dtype = [('A', 'i4'), ('B', 'i4'), ('C', 'i4')]
arr = np.array([(1, 2, 3), (4, 5, 6), (7, 8, 9)], dtype=dtype)

# Swap columns 'A' and 'C'
arr[['A', 'C']] = arr[['C', 'A']]

print("Structured array after swapping columns 'A' and 'C':")
print(arr)

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

Structured array after swapping columns 'A' and 'C':
[(3, 2, 1) (6, 5, 4) (9, 8, 7)]

使用 swapaxes() 函数交换列

我们可以使用 np.swapaxes() 函数进行涉及多个轴的更复杂操作。此函数允许您交换数组的两个指定轴,这在高维数组中特别有用。

以下是语法:

numpy.swapaxes(a, axis1, axis2)

其中,

  • **a:** 要交换轴的输入数组。
  • **axis1:** 要交换的第一个轴。
  • **axis2:** 要交换的第二个轴。

示例

在下面的示例中,我们使用 np.swapaxes() 函数交换第二个轴和第三个轴,有效地重新排序三维数组中的列:

import numpy as np

# Creating a 3D NumPy array
arr = np.array([[[1, 2, 3], [4, 5, 6]], 
                [[7, 8, 9], [10, 11, 12]]])

# Swapping axes 1 and 2
arr_swapped = np.swapaxes(arr, 1, 2)

print("3D array after swapping axes:")
print(arr_swapped)

产生的结果如下:

3D array after swapping axes:
[[[ 1  4]
  [ 2  5]
  [ 3  6]]

 [[ 7 10]
  [ 8 11]
  [ 9 12]]]
广告