Python/Numpy

[Python] 파이썬 numpy 배열 인덱싱 - 1차원, 다차원 행렬

나비🦋 2024. 5. 15. 00:01
반응형



안녕하세요! 나비입니다 🦋

이번 포스팅에서는 파이썬 numpy 라이브러리를 통해 행렬을 인덱싱(indexing)하는 방법에 대해서 소개할 예정입니다.

먼저, 1차원 행렬을 인덱싱하는 기본적인 방법을 소개하고, 그다음에 다차원 배열 인덱싱까지 해보겠습니다.



numpy 1차원 배열 인덱싱

import numpy as np

A = np.array([1,2,3,4,5,6])

a1 = A[2]
a2 = A[1:5]

print(a1)
print(a2)
3
[2,3,4,5]


파이썬에서 배열을 인덱싱하는 방법은 넓게 보면 리스트를 다루는 방법과 비슷합니다. (차이점도 분명 있긴 하지만요) 파이썬 리스트에서 첫 번째 값을 0번째라고 생각하고, 리스트명 뒤에 붙는 “1:4”라는 표기가 4번째를 제외하고 1번째부터 3번째까지라는 점은 동일합니다. 다만, numpy에서의 배열 인덱싱은 array로서의 성격이 더 강하게 나타난다는 정도의 차이가 있습니다. (리스트와의 차이점은 이후의 포스팅에서 보여드리겠습니다.)

이처럼, 가장 기초적인 인덱싱은 리스트 인덱싱과 거의 동일합니다. 하지만, 출력 두 번째 줄의 대괄호는 리스트가 아닌 ndarray라는 점이 다릅니다. 지금은 큰 차이가 없어 보이지만, 배열 요소값의 일부를 바꾸는 등 이후의 처리 과정에서 약간씩의 차이가 있습니다.





numpy 다차원 배열 인덱싱


더 큰 차원의 배열을 인덱싱하는 예제도 아래 보여드리겠습니다.

import numpy as np

A = np.array([[1,2,3], [4,5,6], [7,8,9]])

a1 = A[2][1]
a2 = A[1][0:2]

print(a1)
print(a2)
8
[4,5]


이런 경우에는 중첩으로 인덱싱을 여러 번 합니다. 코드를 보시면, a1에서 [2]는 가장 바깥쪽에 있는 차원에서의 2번째 배열을 의미합니다. 일차적으로 [2]까지만 인덱싱하면 [7,8,9]가 됩니다. 그런데 여기서 인덱싱을 한 번 더 하면, [7,8,9] 안에 있는 요소 하나가 꺼내집니다. 예제에서는 [1]이기 때문에 1번째 값인 8을 불러오게 됩니다.

그리고, a2에서 [1]은 가장 바깥의 [4,5,6]을 의미하고, [0:2]는 [4,5,6]에서 0번째, 1번째 요소를 선택하라는 의미로, 최종 출력은 [4,5]가 됩니다.

이처럼, 다차원의 행렬도 1차원과 마찬가지로 편리하게 인덱싱할 수 있습니다.


반응형