Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python NumPy로 축 1(axis=1) 기준 n차 이산 차분 계산하기

numpy.diff() 메서드 소개

n번째 이산 차분(n-th discrete difference)을 계산하려면 numpy.diff() 메서드를 사용합니다. 주어진 축을 따라 첫 번째 차분은 out[i] = a[i+1] - a[i]로 정의되며, 그보다 높은 차수의 차분은 diff()를 재귀적으로 호출하여 계산됩니다.

diff() 메서드는 n번째 차분 배열을 반환합니다. 출력 배열의 형태(shape)는 axis 방향을 제외하고는 입력 배열과 동일하며, 해당 축의 크기만 n만큼 작아집니다. 출력의 데이터 타입은 입력 배열 a의 두 요소 간 차이의 타입과 같으며, 대부분의 경우 a의 타입과 동일합니다. 주목할 만한 예외는 datetime64 타입으로, 이 경우 결과는 timedelta64 타입의 배열로 반환됩니다.

주요 매개변수

첫 번째 매개변수는 입력 배열입니다. 두 번째 매개변수 n은 값들을 차분하는 횟수로, 0이면 입력 배열이 그대로 반환됩니다. 세 번째 매개변수 axis는 차분을 수행할 축으로, 기본값은 마지막 축입니다. 네 번째 매개변수는 차분을 수행하기 전에 해당 축을 따라 입력 배열 앞이나 뒤에 추가할 값입니다. 스칼라 값은 axis 방향으로 길이 1인 배열로 확장되고, 나머지 모든 축에서는 입력 배열의 형태를 따릅니다.

구현 단계

먼저 필요한 라이브러리를 임포트합니다.

import numpy as np

array() 메서드를 사용해 NumPy 배열을 생성합니다. 여기에는 int 타입 요소와 함께 nan(결측값)도 포함시켰습니다.

arr = np.array([[10, 15, 30, 65], [80, 87, np.nan, 120]])

배열을 화면에 출력합니다.

print("Our Array...\n", arr)

배열의 차원을 확인합니다.

print("\nDimensions of our Array...\n", arr.ndim)

배열의 데이터 타입을 확인합니다.

print("\nDatatype of our Array object...\n", arr.dtype)

numpy.diff() 메서드를 사용해 n번째 이산 차분을 계산합니다. 첫 번째 차분은 주어진 축을 따라 out[i] = a[i+1] - a[i]로 계산되며, 더 높은 차수의 차분은 diff가 재귀적으로 적용됩니다. 여기서는 axis=1, 즉 열 방향으로 차분을 수행합니다.

print("\nDiscrete difference..\n", np.diff(arr, axis = 1))

전체 예제 코드

import numpy as np

# array() 메서드를 사용해 NumPy 배열 생성
# int 타입 요소와 nan(결측값) 포함
arr = np.array([[10, 15, 30, 65], [80, 87, np.nan, 120]])

# 배열 출력
print("Our Array...\n", arr)

# 차원 확인
print("\nDimensions of our Array...\n", arr.ndim)

# 데이터 타입 확인
print("\nDatatype of our Array object...\n", arr.dtype)

# numpy.diff() 메서드로 n번째 이산 차분 계산
# 첫 번째 차분은 out[i] = a[i+1] - a[i], 더 높은 차수는 재귀적으로 계산
print("\nDiscrete difference..\n", np.diff(arr, axis = 1))

실행 결과

Our Array...
[[ 10. 15. 30. 65.]
[ 80. 87. nan 120.]]

Dimensions of our Array...
2

Datatype of our Array object...
float64

Discrete difference..
[[ 5. 15. 35.]
[ 7. nan nan]]

출력 결과를 보면, axis=1(열 방향)을 따라 인접한 요소들의 차이가 계산된 것을 확인할 수 있습니다. 특히 nan이 포함된 경우, nan과의 차분 연산 결과 역시 nan이 되므로 두 번째 행의 결과에 nan이 포함되어 있는 점에 유의하세요.