NumPy - 交换数组的轴



在 NumPy 中交换数组的轴

在 NumPy 中交换轴允许您更改数组中维度的顺序。您可以使用swapaxes() 函数和transpose() 函数在 NumPy 中交换数组的轴。

在 NumPy 中,数组可以有多个维度,每个维度称为一个轴。例如,一个二维数组(矩阵)有两个轴:行和列。在三维数组(张量)中,有三个轴:深度、高度和宽度。

  • 轴 0 指的是第一个维度(通常是行)。
  • 轴 1 指的是第二个维度(通常是列)。
  • 轴 2 指的是第三个维度,以此类推

使用 swapaxes() 函数

NumPy 中的 np.swapaxes() 函数允许您交换数组中两个指定的轴。当您需要重新组织数组的结构时,此函数特别有用,例如在二维数组中切换行和列,或在多维数组中重新排序维度。

此函数不会创建数据的副本,而是返回交换了指定轴的数组的新视图。它不涉及在内存中复制数组的数据。

以下是 swapaxes() 函数的语法:

numpy.swapaxes(arr, axis1, axis2)

其中,

  • arr 是输入数组。
  • axis1 是要交换的第一个轴。
  • axis2 是要交换的第二个轴。

示例

在下面的示例中,我们使用 NumPy 中的 swapaxes() 函数交换二维数组中的行和列:

import numpy as np

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

# Swapping axes 0 and 1 (rows and columns)
swapped = np.swapaxes(arr, 0, 1)

print("Original Array:")
print(arr)

print("\nArray After Swapping Axes:")
print(swapped)

获得以下输出:

Original Array:
[[1 2 3]
 [4 5 6]]

Array After Swapping Axes:
[[1 4]
 [2 5]
 [3 6]]

使用 transpose() 函数

我们还可以使用 transpose() 函数在 NumPy 中交换数组的轴。与 swapaxes() 函数(交换两个特定轴)不同,transpose() 函数用于根据指定的模式重新排序数组的所有轴。

以下是 transpose() 函数的语法:

numpy.transpose(a, axes=None)

其中,

  • a 是要重新排序其轴的输入数组。
  • axes 是一个元组或列表,指定所需的轴顺序。如果 axes 为 None,则反转轴的顺序。

示例:矩阵转置

矩阵转置是交换二维数组的行和列的操作:

import numpy as np

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

# Transposing the matrix
transposed = np.transpose(arr)

print("Original Array:")
print(arr)

print("\nTransposed Array:")
print(transposed)

这将产生以下结果:

Original Array:
[[1 2 3]
 [4 5 6]]

Transposed Array:
[[1 4]
 [2 5]
 [3 6]]

示例:重新排序三维数组中的轴

在这里,我们使用 transpose() 函数重新排序多维数组中的维度:

import numpy as np

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

# Transposing with custom axis order
transposed = np.transpose(arr, (1, 0, 2))

print("Original Array Shape:", arr.shape)
print("Transposed Array Shape:", transposed.shape)
print("\nTransposed Array:")
print(transposed)

这将产生以下结果:

Original Array Shape: (2, 2, 2)
Transposed Array Shape: (2, 2, 2)

Transposed Array:
[[[1 2]
  [5 6]]

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