Python NumPy 移位陣列

Muhammad Maisam Abbas 2023年1月30日
  1. 使用 np.roll() 方法的 NumPy 移位陣列
  2. NumPy Shift Array 與 Python 中的切片方法
  3. Python 中 scipy.ndimage.interpolation 庫中帶有 shift() 函式的 NumPy 移位陣列
Python NumPy 移位陣列

本教程將介紹移動 NumPy 陣列的方法。

使用 np.roll() 方法的 NumPy 移位陣列

如果我們想右移或左移 NumPy 陣列的元素,我們可以使用 Python 中的 numpy.roll() 方法numpy.roll() 方法用於沿指定軸滾動陣列元素。它接受陣列和我們想要移動陣列元素的位置數,並返回移動後的陣列。如果我們想向右移動元素,我們必須使用一個正整數作為移動值。如果我們想向左移動元素,我們必須指定一個負的移動值。以下程式碼示例顯示瞭如何使用 numpy.roll() 方法移動陣列的元素。

import numpy as np

array = np.array([1, 2, 3, 4, 5])

array_new = np.roll(array, 3)
print(array_new)

輸出:

[3 4 5 1 2]

我們首先使用 np.array() 函式建立了陣列。然後我們使用 np.roll() 函式將元素向右移動,並將結果陣列儲存在 array_new 中。

NumPy Shift Array 與 Python 中的切片方法

如果我們想向右或向左移動元素並將移動的索引替換為常量值,我們必須使用 Python 中的陣列切片方法。我們可以像原始陣列一樣建立一個新的空陣列。如果移位值為正,我們用常量值填充陣列的左側,如果移位值為負,我們用常量值填充陣列的右側。然後我們可以用原始陣列中的值填充新陣列的剩餘索引。下面的程式碼示例演示如何使用陣列切片方法移動陣列的元素。

import numpy as np

array = np.array([1, 2, 3, 4, 5])
num = -3
fill_value = 0


def shift(arr, num, fill_value):
    result = np.empty_like(arr)
    if num > 0:
        result[:num] = fill_value
        result[num:] = arr[:-num]
    elif num < 0:
        result[num:] = fill_value
        result[:num] = arr[-num:]
    else:
        result[:] = arr
    print(result)


shift(array, num, fill_value)

輸出:

[4 5 0 0 0]

我們定義了函式 shift(),它使用上面程式碼中的陣列切片方法將陣列的元素向左移動三位。我們首先使用 np.array() 方法建立了原始陣列。然後我們指定了我們想要移動陣列元素的索引數量 num 和我們想要替換所有移動索引的常量值 fill_value。最後,我們將這些值傳遞給 shift() 函式,該函式使用 np.empty_like(arr) 函式建立一個新陣列 result,就像我們的原始陣列一樣,儲存移位的元素,並列印移位的陣列。

Python 中 scipy.ndimage.interpolation 庫中帶有 shift() 函式的 NumPy 移位陣列

scipy.ndimage.interpolation 庫中的 shift() 方法 用於使用 Python 中的樣條插值方法移動陣列。與 numpy.roll() 方法不同,shift() 方法可以移動陣列並同時用指定的常量值替換移動的索引。shift() 函式將原始陣列、我們想要移動的索引數量以及我們想要用移動索引替換的常量值作為輸入引數,並返回移動後的陣列,其中每個移動的索引都被替換為指定的恆定值。下面的程式碼示例向我們展示瞭如何使用 shift() 函式移動陣列的元素。

import numpy as np
from scipy.ndimage.interpolation import shift

array = np.array([1, 2, 3, 4, 5])

result = shift(array, 3, cval=0)
print(result)

輸出:

[0 0 0 1 2]

我們將 array 的元素向右移動了三個位置,並使用上面程式碼中的 shift() 函式用 0 替換了移動的索引。我們首先使用 np.array() 函式建立了我們的陣列。然後我們使用 shift 函式將 array 向右移動 3 個位置,並用常量值 0 替換原始陣列的前三個索引。我們將 shift() 函式的輸出儲存在 result 陣列中。最後,我們將值列印在 result 陣列中。

所有這些方法都可以正常工作。如果我們只想移動陣列內的值,而不想用常量值替換移動的索引,我們應該使用 numpy.roll() 函式。另一方面,如果我們想用特定的常量值替換移位的索引,則陣列切片方法是此操作的最快方法。陣列切片方法更快,但比使用 scipy 庫中的 shift() 函式要複雜一些。如果我們不關心程式碼的效能,我們可以使用 shift() 函式來完成這個任務。

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

相關文章 - NumPy Array