[머신러닝]/[Numpy, Pandas]

[Numpy] numpy.meshgrid함수

hgk0404 2023. 6. 16. 19:04
728x90

넘파이(Numpy)에서 meshgrid 함수는 격자 포인트의 좌표를 생성하는 데 사용되는 함수입니다. 이 함수는 두 개 이상의 1차원 배열을 받아서 각 배열의 요소들로 구성된 모든 가능한 좌표 쌍을 반환합니다. 반환된 좌표 쌍은 다차원 격자 형태로 구성됩니다.

 

P = (xi, yi)는 그림과 같이 하나의 좌표로써 표현할 수 있는데 그림과 같이 직사각형 그리드 안에서 될 수 있도록 배치를 하는게 meshgrid의 역할입니다. 

https://media.geeksforgeeks.org/wp-content/uploads/20190326203020/mesh04.png

 

 

매개변수의 종류

 

meshgrid()의 파라미터는 다음과 같은 형태를 가지고 있습니다.

np.meshgrid(xi, copy=True, sparse=False, indexing='xy')
x1, x2, ..... 배열, 그리드의 좌표를 나타내는 1차원 배열
indexing {xy, ij} : 카테시안 인덱스(일반좌표)를 원하면 'xy', 행렬 인덱스는 'ij'
sparse 디폴트는 False, True로 하면 메모리 절약을 위해 희소 그리드를 반환
copy 디폴트는 True, False로 하면 메모리 절약을 위해 오리지널 배열로 전환

 

 

meshgrid() 함수를 이용하기

 

x = np.linspace(1, 5, 5) # 1~5까지 5개의 수
y = np.linspace(6, 10, 5) # 6~10까지 5개의 수
print(x)
>>> [1. 2. 3. 4. 5.]
print(y)
>>> [ 6.  7.  8.  9. 10.]

x는 1 ~5까지 y는 6~10까지의 1차원 배열입니다.

 

X, Y = np.meshgrid(x, y)
print(X)
>>> 
[[1. 2. 3. 4. 5.]
 [1. 2. 3. 4. 5.]
 [1. 2. 3. 4. 5.]
 [1. 2. 3. 4. 5.]
 [1. 2. 3. 4. 5.]]
print(Y)
>>>
[[ 6.  6.  6.  6.  6.]
 [ 7.  7.  7.  7.  7.]
 [ 8.  8.  8.  8.  8.]
 [ 9.  9.  9.  9.  9.]
 [10. 10. 10. 10. 10.]]

직사각형으로 만들어야 하니 X, Y의 모양이 5x5이 되게 됩니다.

 

입력받은 소문자 x는 1~5까지의 1차원 배열이고 소문자 y는 6~10까지의 1차원 배열입니다. meshgrid함수의 동작은 입력으로 받은 'x'와 'y' 배열의 요소들을 조합하여 좌표 격자를 형성하는 것 입니다. 이때 'x' 배열은 행 방향으로 반복되고, 'y' 배열은 열 방향으로 반복됩니다. 따라서 'X', 'Y'의 구조는 입력으로 받은 'x', 'y'의 구조와 동일해야 합니다.

 

  • X는 x 배열의 요소인 [1, 2, 3, 4, 5]을 행 방향으로 반복하여 구성합니다.
  • Y는 y 배열의 요소인 [6, 7, 8, 9, 10]을 열 방향으로 반복하여 구성합니다.

 

indexing

indexing이란?

카테시안 행렬과 인덱스 행렬의 차이

카테시안은 x는 가로, y는 세로로 표현하는데, 인덱스 행렬은 i는 행, j는 열로 표현합니다. (서로 transpose)

✦ 매개변수에 indexing="ij"를 넣으면 대문자 X는 행반복에서 열반복으로 대문자 Y는 열반복에서 행반복이 된다고 생각하시면 됩니다.

x1, y1 = np.meshgrid(x, y)
x2, y2 = np.meshgrid(x, y, indexing="ij") # transpose

print(x1, y1)
>>>
[[1. 2. 3. 4. 5.]
 [1. 2. 3. 4. 5.]
 [1. 2. 3. 4. 5.]
 [1. 2. 3. 4. 5.]
 [1. 2. 3. 4. 5.]]
 [[ 6.  6.  6.  6.  6.]
 [ 7.  7.  7.  7.  7.]
 [ 8.  8.  8.  8.  8.]
 [ 9.  9.  9.  9.  9.]
 [10. 10. 10. 10. 10.]]
print(x2, y2) # x2는 열반복이 되고, y2는 행반복이 된다.
>>>
[[1. 1. 1. 1. 1.]
 [2. 2. 2. 2. 2.]
 [3. 3. 3. 3. 3.]
 [4. 4. 4. 4. 4.]
 [5. 5. 5. 5. 5.]]
 [[ 6.  7.  8.  9. 10.]
 [ 6.  7.  8.  9. 10.]
 [ 6.  7.  8.  9. 10.]
 [ 6.  7.  8.  9. 10.]
 [ 6.  7.  8.  9. 10.]]
print(x1[0][1], x2[0][1])
>>> 2.0 1.0

 

 

 

 

 

 

 


넘파이 linspace 함수

 

 

 

 

 

 

728x90