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