Как сдвинуть элементы в массиве NumPy (с примерами)


Вы можете использовать один из следующих методов для смещения элементов в массиве NumPy:

Метод 1: сдвинуть элементы (сохранить все исходные элементы)

#shift each element two positions to the right
data_new = np.roll (data, 2)

Способ 2: элементы сдвига (разрешить замену элементов)

#define shifting function
def shift_elements (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
 return result

#shift each element two positions to the right (replace shifted elements with zero)
data_new = shift_elements(data, 2, 0)

В следующих примерах показано, как использовать каждый метод на практике.

Метод 1: сдвинуть элементы (сохранить все исходные элементы)

В следующем коде показано, как использовать функцию np.roll() для сдвига каждого элемента в массиве NumPy на две позиции вправо:

import numpy as np

#create NumPy array
data = np.array([1, 2, 3, 4, 5, 6])

#shift each element two positions to the right
data_new = np.roll (data, 2)

#view new NumPy array
data_new

array([5, 6, 1, 2, 3, 4])

Обратите внимание, что каждый элемент был сдвинут на две позиции вправо, а элементы в конце массива просто переместились вперед.

Мы также могли бы использовать отрицательное число в функции np.roll() для сдвига элементов влево:

import numpy as np

#create NumPy array
data = np.array([1, 2, 3, 4, 5, 6])

#shift each element three positions to the left
data_new = np.roll (data, -3)

#view new NumPy array
data_new

array([4, 5, 6, 1, 2, 3])

Способ 2: элементы сдвига (разрешить замену элементов)

Мы также можем определить пользовательскую функцию для сдвига элементов в массиве NumPy и разрешить замену сдвинутых элементов на определенное значение.

Например, мы можем определить следующую функцию для сдвига элементов и замены любых сдвинутых элементов значением 0:

import numpy as np

#create NumPy array
data = np.array([1, 2, 3, 4, 5, 6])

#define custom function to shift elements
def shift_elements (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
 return result

#shift each element two positions to the right and replace shifted values with zero
data_new = shift_elements(data, 2, 0)

#view new NumPy array
data_new

array([0, 0, 1, 2, 3, 4])

Мы также можем использовать отрицательное число в функции, чтобы сдвинуть элементы влево:

import numpy as np

#create NumPy array
data = np.array([1, 2, 3, 4, 5, 6])

#define custom function to shift elements
def shift_elements (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
 return result

#shift each element three positions to the left and replace shifted values with 50
data_new = shift_elements(data, -3, 50)

#view new NumPy array
data_new

array([ 4, 5, 6, 50, 50, 50])

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в NumPy:

Как подсчитать количество вхождений элементов в NumPy
Как отсортировать массив NumPy по столбцу
Как рассчитать режим массива NumPy