Python NumPy 시프트 배열

Muhammad Maisam Abbas 2023년1월30일
  1. np.roll()메서드를 사용한 NumPy 시프트 배열
  2. 파이썬에서 슬라이싱 방법을 사용하는 NumPy 시프트 배열
  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 시프트 배열

요소를 오른쪽 또는 왼쪽으로 이동하고 이동 된 인덱스를 상수 값으로 바꾸려면 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를 지정했습니다. 결국, 우리는np.empty_like(arr)함수를 사용하여 원래 배열과 같은 새 배열result를 생성하고 이동 된 요소를 저장하고 이동 된 배열을 인쇄하는shift()함수에이 값을 전달했습니다.

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 함수를 사용하여array3자리만큼 오른쪽으로 이동하고 원래 배열의 처음 세 인덱스를 상수 값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