Массив сдвига Python NumPy

  1. Массив сдвига NumPy с методом np.roll()
  2. Массив сдвига NumPy с методом нарезки в Python
  3. Массив NumPy Shift с функцией shift() Внутри библиотеки scipy.ndimage.interpolation в Python

В этом руководстве будут представлены методы сдвига массива NumPy.

Массив сдвига NumPy с методом np.roll()

Если мы хотим сдвинуть элементы массива NumPy вправо или влево, мы можем использовать метод numpy.roll() в Python. Метод 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 с методом нарезки в 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(), которая создает новый массив result, подобный нашему исходному массиву с функцией np.empty_like(arr), сохраняет сдвинутые элементы и печатает сдвинутый массив..

Массив NumPy Shift с функцией shift() Внутри библиотеки scipy.ndimage.interpolation в Python

Метод shift() внутри библиотеки scipy.ndimage.interpolation используется для сдвига массива с использованием метода интерполяции сплайном в 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 на три позиции вправо и заменили сдвинутые индексы на 0 с помощью функции shift() в приведенном выше коде. Сначала мы создали наш массив с помощью функции np.array(). Затем мы использовали функцию сдвига, чтобы сдвинуть массив вправо на 3 разряда и заменить первые три индекса исходного массива постоянным значением 0. Мы сохранили вывод функции shift() внутри массива result. В итоге мы распечатали значения внутри массива result.

Все эти методы отлично работают. Если мы хотим только сдвинуть значения внутри массива и не хотим заменять сдвинутые индексы постоянным значением, мы должны использовать функцию numpy.roll(). С другой стороны, если мы хотим заменить смещенные индексы на конкретное постоянное значение, метод нарезки массива является самым быстрым методом для этой операции. Метод нарезки массива быстрее, но немного сложнее, чем использование функции shift() в библиотеке scipy. Если нас не волнует производительность нашего кода, мы можем использовать функцию shift() для этой задачи.