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

Python NumPy로 라게르(Laguerre) 다항식의 3D 의사 반데르몬드(Vandermonde) 행렬 생성하기

x, y, z 세 개의 샘플 포인트를 기준으로 라게르(Laguerre) 다항식의 의사 반데르몬드(pseudo Vandermonde) 행렬을 생성하려면 Python NumPy에서 제공하는 laguerre.lagvander3d() 함수를 사용합니다.

이 함수의 주요 매개변수는 다음과 같습니다.

  • x, y, z – 포인트 좌표 배열을 반환합니다. 요소 중 하나라도 복소수가 포함되어 있으면 dtype은 complex128로, 그렇지 않으면 float64로 자동 변환됩니다. 만약 x가 스칼라 값이라면 1차원 배열로 변환됩니다.
  • deg – [x_deg, y_deg, z_deg] 형태로 각 축별 최대 차수를 지정하는 리스트입니다.

단계별 구현 방법

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

import numpy as np
from numpy.polynomial import laguerre as L

numpy.array() 메서드를 사용하여 모두 동일한 형태(shape)를 가지는 포인트 좌표 배열을 생성합니다.

x = np.array([1, 2])
y = np.array([3, 4])
z = np.array([5, 6])

생성된 배열들을 화면에 출력해 확인합니다.

print("Array1...\n",x)
print("\nArray2...\n",y)
print("\nArray3...\n",z)

각 배열의 데이터 타입(dtype)을 확인합니다.

print("\nArray1 datatype...\n",x.dtype)
print("\nArray2 datatype...\n",y.dtype)
print("\nArray3 datatype...\n",z.dtype)

배열들의 차원(dimension)을 확인합니다.

print("\nDimensions of Array1...\n",x.ndim)
print("\nDimensions of Array2...\n",y.ndim)
print("\nDimensions of Array3...\n",z.ndim)

배열들의 형태(shape)를 확인합니다.

print("\nShape of Array1...\n",x.shape)
print("\nShape of Array2...\n",y.shape)
print("\nShape of Array3...\n",z.shape)

x, y, z 샘플 포인트를 이용해 라게르 다항식의 의사 반데르몬드 행렬을 생성합니다.

x_deg, y_deg, z_deg = 2, 3, 4
print("\nResult...\n",L.lagvander3d(x,y,z, [x_deg, y_deg, z_deg]))

전체 예제 코드

import numpy as np
from numpy.polynomial import laguerre as L

# numpy.array() 메서드로 동일한 shape를 가지는 포인트 좌표 배열 생성
x = np.array([1, 2])
y = np.array([3, 4])
z = np.array([5, 6])

# 배열 출력
print("Array1...\n",x)
print("\nArray2...\n",y)
print("\nArray3...\n",z)

# 데이터 타입 출력
print("\nArray1 datatype...\n",x.dtype)
print("\nArray2 datatype...\n",y.dtype)
print("\nArray3 datatype...\n",z.dtype)

# 차원 확인
print("\nDimensions of Array1...\n",x.ndim)
print("\nDimensions of Array2...\n",y.ndim)
print("\nDimensions of Array3...\n",z.ndim)

# 형태(shape) 확인
print("\nShape of Array1...\n",x.shape)
print("\nShape of Array2...\n",y.shape)
print("\nShape of Array3...\n",z.shape)

# lagvander3d()로 라게르 다항식의 의사 반데르몬드 행렬 생성
x_deg, y_deg, z_deg = 2, 3, 4
print("\nResult...\n",L.lagvander3d(x,y,z, [x_deg, y_deg, z_deg]))

실행 결과

위 코드를 실행하면 아래와 같은 결과를 얻을 수 있습니다. 각 배열은 int64 타입의 1차원 배열이며, 최종적으로 (2, 60) 크기의 의사 반데르몬드 행렬이 생성됩니다. 행렬의 열 개수는 (x_deg+1) × (y_deg+1) × (z_deg+1), 즉 3 × 4 × 5 = 60개로 계산됩니다.

Array1...
   [1 2]

Array2...
   [3 4]

Array3...
   [5 6]

Array1 datatype...
int64

Array2 datatype...
int64

Array3 datatype...
int64

Dimensions of Array1...
1

Dimensions of Array2...
1

Dimensions of Array3...
1

Shape of Array1...
(2,)

Shape of Array2...
(2,)

Shape of Array3...
(2,)

Result...
   [[ 1. -4.   3.5   2.66666667 -1.29166667
     -2.   8. -7.   -5.33333333  2.58333333
     -0.5 2. -1.75 -1.33333333  0.64583333
      1. -4.   3.5   2.66666667 -1.29166667
      0. -0.   0.    0.         -0.
   -0.        0.         -0.   -0.          0.
   -0.        0.          -0.         -0.          0.
     0. -      0.           0.          0.         -0.
    -0.5        2.          -1.75       -1.33333333  0.64583333
    1.         -4.           3.5         2.66666667 -1.29166667
    0.25       -1.           0.875       0.66666667 -0.32291667
   -0.5         2.          -1.75       -1.33333333  0.64583333]
  [ 1.         -5.           7.          1.         -5.
   -3.         15.          -21.        -3.         15.
    1.         -5.           7.          1.         -5.
    2.33333333 -11.66666667 16.33333333  2.33333333 -11.66666667
   -1.          5.         -7.          -1.          5.
    3.         -15.         21.          3.         -15.
   -1.          5.         -7.          -1.           5.
   -2.33333333 11.66666667 -16.33333333 -2.33333333  11.66666667
   -1.          5.         -7.          -1.           5.
    3.        -15.         21.           3.          -15.
   -1.          5.         -7.          -1.           5.
   -2.33333333 11.66666667 -16.33333333 -2.33333333  11.66666667]]

정리

NumPy의 laguerre.lagvander3d() 함수는 3차원 라게르 다항식 피팅(fitting)이나 회귀 분석에 필요한 설계 행렬(design matrix)을 손쉽게 만들어 줍니다. 입력 배열의 dtype은 복소수 포함 여부에 따라 float64 또는 complex128로 자동 변환되며, deg 매개변수를 통해 각 축의 최대 차수를 유연하게 조절할 수 있다는 점을 기억하면 됩니다.