넘파이(Numpy)에서 meshgrid 함수는 격자 포인트의 좌표를 생성하는 데 사용되는 함수입니다. 이 함수는 두 개 이상의 1차원 배열을 받아서 각 배열의 요소들로 구성된 모든 가능한 좌표 쌍을 반환합니다. 반환된 좌표 쌍은 다차원 격자 형태로 구성됩니다.
P = (xi, yi)는 그림과 같이 하나의 좌표로써 표현할 수 있는데 그림과 같이 직사각형 그리드 안에서 될 수 있도록 배치를 하는게 meshgrid의 역할입니다.
매개변수의 종류
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
'[머신러닝] > [Numpy, Pandas]' 카테고리의 다른 글
[Pandas] CSV파일에 데이터 쓰기 (0) | 2023.06.21 |
---|---|
[Pandas] 판다스 기초1 (0) | 2023.06.20 |
[Numpy] linspace함수 (구간 내에 숫자 채우기) (0) | 2023.06.16 |
[Numpy] np.arange 사용법과 range와의 차이 (0) | 2023.06.16 |
[Pandas] 판다스 설치 (0) | 2023.06.15 |