NumPy의 np.gradient() 함수는 내부 지점(interior points)에서는 2차 정확도의 중앙 차분(central difference)을 사용하고, 경계 지점에서는 1차 또는 2차 정확도의 편측 차분(forward/backward difference)을 사용하여 그라디언트를 계산합니다. 따라서 반환되는 그라디언트는 입력 배열과 동일한 형태(shape)를 가집니다.
주요 매개변수 살펴보기
- f: 스칼라 함수의 샘플 값을 담고 있는 N차원 배열입니다.
- varargs: f 값들 사이의 간격(spacing)을 지정합니다. 기본값은 모든 차원에 대해 단위 간격(unitary spacing)입니다.
- edge_order {1, 2}: 경계에서 그라디언트를 N차 정확도의 차분으로 계산합니다. 기본값은 1입니다.
- axis: 지정된 축(또는 축들)에 대해서만 그라디언트를 계산합니다. 기본값(axis = None)은 입력 배열의 모든 축에 대해 그라디언트를 계산하는 것입니다. axis는 음수 값도 허용되며, 이 경우 마지막 축부터 첫 번째 축 순으로 해석됩니다.
이 메서드는 f의 각 차원에 대한 도함수(편미분)에 해당하는 ndarray 리스트를 반환하며, 각 도함수는 f와 동일한 형태를 가집니다.
구현 단계
먼저 필요한 라이브러리를 임포트합니다.
import numpy as np
array() 메서드를 사용해 NumPy 배열을 생성합니다. 여기서는 float 타입의 요소들을 추가했습니다.
arr = np.array([[20, 35, 57], [70, 85, 120]], dtype = float)
생성한 배열을 화면에 출력합니다.
print("Our Array...\n", arr)
배열의 차원을 확인합니다.
print("\nDimensions of our Array...\n", arr.ndim)
배열 객체의 데이터 타입을 확인합니다.
print("\nDatatype of our Array object...\n", arr.dtype)
축 0(axis = 0)을 따라 그라디언트를 계산합니다. 내부 지점에는 2차 정확도의 중앙 차분이, 경계에는 편측 차분이 적용되며, 결과는 입력 배열과 같은 형태를 가집니다.
print("\nResult (gradient)...\n", np.gradient(arr, axis = 0))
전체 예제 코드
import numpy as np
# array() 메서드를 사용해 NumPy 배열 생성
# float 타입의 요소 추가
arr = np.array([[20, 35, 57], [70, 85, 120]], dtype = float)
# 배열 출력
print("Our Array...\n", arr)
# 차원 확인
print("\nDimensions of our Array...\n", arr.ndim)
# 데이터 타입 확인
print("\nDatatype of our Array object...\n", arr.dtype)
# 축 0을 따라 그라디언트 계산
# 내부 지점: 2차 정확도 중앙 차분 / 경계: 편측 차분 적용
print("\nResult (gradient)...\n", np.gradient(arr, axis = 0))
실행 결과
Our Array... [[ 20. 35. 57.] [ 70. 85. 120.]] Dimensions of our Array... 2 Datatype of our Array object... float64 Result (gradient)... [[50. 50. 63.] [50. 50. 63.]]
결과를 보면 축 0(행 방향)을 따라 각 열별로 그라디언트가 계산된 것을 확인할 수 있습니다. 예를 들어 첫 번째 열의 경우 (70 − 20) ÷ 1 = 50이 되어 두 행 모두 50이라는 동일한 그라디언트 값이 반환되며, 세 번째 열은 (120 − 57) ÷ 1 = 63이 됩니다.