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]]]
廣告