Python의 3D 보간

Zeeshan Afridi 2023년6월21일
  1. 보간의 중요성
  2. Python에서 보간용 SciPy 설치
  3. Python에서 3D 보간에 SciPy의 interpn() 메서드 사용
  4. Python에서 3D 보간에 RegularGridInterpolator 사용
  5. 결론
Python의 3D 보간

보간은 불연속 세트의 정의된 범위 내에서 새 데이터 포인트를 구성하는 방법입니다. 보간은 점 또는 곡선 사이의 값을 찾는 것을 의미합니다.

수학적 관점에서 보간법은 다른 알려진 데이터 포인트 사이에 있는 특정 미지 데이터 포인트의 값을 얻는 것입니다.

보간의 중요성

보간은 예측, 데이터 분석 및 기타 여러 응용 프로그램을 만들기 위한 강력한 도구입니다. 소음 수준, 강우량, 고도 등과 같은 지리 관련 데이터에 대해 알려지지 않은 값을 예측합니다.

보간에는 많은 용도가 있습니다. 기계 학습(ML)에서는 데이터 세트에서 누락된 데이터를 처리하는 경우가 많으며 이러한 값을 대체하기 위해 보간법이 자주 사용됩니다.

Python에서 보간용 SciPy 설치

Python에서 보간법을 사용하려면 SciPy 코어 라이브러리, 특히 interpolation 모듈을 사용해야 합니다.

SciPy는 수학적 처리 및 데이터 분석 최적화를 위한 많은 유용한 기능을 제공합니다. 1차원, 2차원, 3차원 보간에 유용한 함수를 제공합니다.

계속 진행하려면 Python에 SciPy 라이브러리를 설치하는 방법을 알아야 합니다.

SciPy를 설치하려면 명령줄 인터페이스로 이동하여 다음 명령을 입력합니다.

pip install scipy

성공적으로 설치되면 import 키워드를 사용하여 Python 프로그램으로 가져올 수 있습니다.

Python에서 3D 보간에 SciPy의 interpn() 메서드 사용

SciPy 라이브러리의 interpn() 메서드를 사용하여 3D 보간을 수행할 수 있습니다. 이는 이 방법을 사용하여 3차원 이상의 차원을 찾을 수 있음을 의미합니다.

interpn() 함수 구문:

scipy.interpolate.interpn(
    points, values, xi, method="linear", bounds_error=True, fill_value=nan
)

interpn() 함수의 매개변수:

  1. 포인트: 모양 (m1, ),…,(mn, )을 갖는 float의 ndarray 튜플.

    n차원의 일반 그리드는 이러한 점을 통해 정의됩니다. 각 차원의 포인트(즉, 포인트 튜플의 모든 요소)는 엄격하게 오름차순 또는 내림차순이어야 합니다.

  2. : 배열과 같은 모양 (m1,…,mn,…).

    데이터는 n차원의 일반 그리드에 있습니다. 복잡한 데이터도 수용할 수 있습니다.

  3. xi : 모양 (…,ndim)ndarray.

    격자 데이터를 샘플링하기 위한 좌표가 있는 곳입니다.

  4. 방법: str, 선택 사항

    보간 방법은 linear, nearestsplinef2d입니다. splinef2d는 2D 데이터에만 지원됩니다.

  5. bounds_error: 부울, 선택 사항

true인 경우 입력 데이터의 도메인 외부에서 보간된 값이 요청되면 `ValueError`가 발생합니다. false이면 `fill_value`가 사용됩니다.
  1. fill_value: 숫자, 선택 사항

숫자를 제공하면 함수는 보간 도메인 외부의 포인트를 사용할 수 있습니다. None인 경우 도메인 외부의 값이 외삽됩니다. splinef2d 메서드는 외삽법을 지원하지 않습니다.

interpn() 메서드는 values_x: ndarray, 모양 xi.shape[:-1] + values.shape[ndim:]을 반환합니다. 보간된 values.ndarray는 각 차원의 모양 길이와 ndim이 차원의 수인 다차원 컨테이너입니다.

이제 우리는 interpn() 함수와 그 매개변수를 이해했습니다. 실제적인 예를 들어 보겠습니다.

이 예제에서는 세 개의 인수를 interpn() 메서드에 전달합니다.

예제 코드:

# import libraries
from scipy.interpolate import interpn
import numpy as np

# define a function to get the value


def v_function_3d(x, y, z):
    return 3 * x + 4 * y - z


# the np.linspace() function returns the interval between the given numbers.
x = np.linspace(0, 4, 5)
y = np.linspace(0, 5, 6)
z = np.linspace(0, 6, 7)

# in three dimensions, a point's coordinates are treated collectively as a single object.
points = (x, y, z)

# meshgrid, it changes NumPy arrays into coordinate matrices or grids of values
values = v_function_3d(*np.meshgrid(*points, indexing="ij"))

# coordinates to sample the gridded data are
point = np.array([2.21, 3.12, 1.15])

# evaluate the 3d interpolating function at a point
print(interpn(points, values, point))

출력:

[17.96]

Python에서 3D 보간에 RegularGridInterpolator 사용

여러 차원에서 일반 또는 직선 그리드에 대한 보간은 RegularGridInterpolator 클래스를 사용하여 수행됩니다.

데이터를 정의하려면 직선 그리드 또는 간격이 규칙적이거나 고르지 않은 직사각형 그리드가 필요합니다. 선형, 가장 가까운 이웃 및 스플라인 보간을 지원합니다.

보간기 개체를 설정한 후 보간 방법을 선택할 수 있습니다.

보간할 주변 그리드 포인트를 선형으로 보간할 때 RegularGridInterpolator를 사용합니다. 일정한 간격으로 데이터를 입력합니다.

다음 예제에서는 보간에 RegularGridInterpolator를 사용하는 방법을 설명합니다.

# import libraries
import scipy.interpolate as reg_grid
import numpy as np

# define a function to get value


def v_function_3d(x, y, z):
    return 2 * x + 3 * y - z


# define an interpolating function
RGI = reg_grid.RegularGridInterpolator

# arrays constituting the 3d grid
x = np.linspace(0, 50, 50)
y = np.linspace(0, 50, 50)
z = np.linspace(0, 50, 50)

# in three dimensions, a point is a number (coordinates) that are treated collectively as a single object.
points = (x, y, z)

# meshgrid, it changes NumPy arrays into coordinate matrices or grids of values
vals = v_function_3d(*np.meshgrid(*points, indexing="ij"))

# make the interpolator
rgi = RGI(points, values=vals)
pnt = (2.5, 3.5, 1.5)
print(rgi(pnt))

출력:

13.999999999999998

결론

scipy 라이브러리와 interpn() 또는 RegularGridInterpolator 메서드를 사용하여 Python에서 3D 보간을 사용할 수 있습니다. 예측, 데이터 분석 및 기타 여러 응용 프로그램을 쉽게 만들 수 있습니다.

보간은 사용자가 수집된 데이터 외부에 존재할 수 있는 데이터를 결정하는 데 도움이 됩니다.

Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn