본문 바로가기
Python/NumPy

NumPy 인덱싱, 슬라이싱, 반복

by 찐남 2021. 9. 9.
본 포스팅은 NumPy 패키지 홈페이지의 원문을 기반으로 작성하였습니다. 

 



1차원 배열은 목록 및 기타 Python 시퀀스와 마찬가지로 인덱싱, 슬라이스 및 반복을 처리할 수 있습니다. 

 

>>> a = np.arange(10)**3
>>> a
array([ 0, 1, 8, 27, 64, 125, 216, 343, 512, 729])
>>> a[2]
8
>>> a[2:5]
array([ 8, 27, 64])
>>> # a[0:6:2] = 1000 와 동일
>>> # 시작부터 위치 6까지, 배타적, 모든 두 번째 요소를 1000으로 설정
>>> a[:6:2] = 1000
>>> a array([1000, 1, 1000, 27, 1000, 125, 216, 343, 512, 729])
>>> a[::-1] # reversed a
array([ 729, 512, 343, 216, 125, 1000, 27, 1000, 1, 1000])
>>> for i in a:
________print(i**(1 / 3.))
9.999999999999998
1.0
9.999999999999998
3.0
9.999999999999998
4.999999999999999
5.999999999999999
6.999999999999999
7.999999999999999
8.999999999999998

 

다차원 배열은 축당 하나의 인덱스를 가질 수 있습니다. 이러한 인덱스는 쉼표로 구분된 튜플에 제공됩니다. 

 

>>> def f(x, y):
________return 10 * x + y
>>> b = np.fromfunction(f, (5, 4), dtype=int)
>>> b
array([[ 0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33], [40, 41, 42, 43]])
>>> b[2, 3]
23
>>> b[0:5, 1] # b의 두 번째 열에 있는 각 행
array([ 1, 11, 21, 31, 41])
>>> b[:, 1]    # 이전 예와 동일
array([ 1, 11, 21, 31, 41])
>>> b[1:3, :]  # b의 두 번째 및 세 번째 행의 각 열
array([[10, 11, 12, 13], [20, 21, 22, 23]])

 

축 수보다 적은 인덱스가 제공되면 누락된 인덱스는 완전한 조각으로 간주됩니다. 

 

>>> b[-1]   # 마지막 행. b[-1, :]와 동일
array([40, 41, 42, 43])

 

b[i]에서 괄호 안의 표현식은 i 다음에 나머지 축을 나타내는 데 필요한 만큼 :의 인스턴스가 오는 것으로 처리됩니다. NumPy에서는 점을 사용하여 이것을 b[i, ...]로 작성할 수도 있습니다. 

 

dot(...)은 완전한 인덱싱 튜플을 생성하는 데 필요한 만큼의 콜론을 나타냅니다. 

예를 들어, x가 5개의 축이 있는 배열인 경우

 

  • x[1, 2, ...]는 x[1, 2, :, :, :]
  • x[..., 3] ~ x[:, :, :, :, 3]
  • x[4, ..., 5, :]에서 x[4, :, :, 5, :]

 

>>> c = np.array([[[ 0, 1, 2], # a 3D array (두 개의 스택 2D 어레이)
_____________________[ 10, 12, 13]],
_____________________[[100, 101, 102],
______________________[110, 112, 113]]])
>>> c.shape (2, 2, 3)
>>> c[1, ...]      # c[1, :, :] 혹은 c[1]와 결과 동일
array([[100, 101, 102], [110, 112, 113]])
>>> c[..., 2]      # c[:, :, 2]와 결과 동일
array([[ 2, 13], [102, 113]])

 

다차원 배열에 대한 반복은 첫 번째 축에 대해 수행됩니다. 

 

>>> for row in b:
________print(row)
________[0 1 2 3]
________[10 11 12 13]
________[20 21 22 23]
________[30 31 32 33]
________[40 41 42 43]

 

그러나 배열의 각 요소에 대해 작업을 수행하려는 경우 배열의 모든 요소에 대한 반복자인 flat 속성을 사용하면 처리할 수 있습니다.

 

>>> for element in b.flat:
________print(element)

________0
________1
________2
________3
________10
________11
________12
________13
________20
________21
________22
________23
________30
________31
________32
________33
________40
________41
________42
________43

( ※ newaxisndenumerateindices 등도 참고하시면 도움이 됩니다. 다음에 정리해 보도록 할게요.)

 

 



반응형

'Python > NumPy' 카테고리의 다른 글

NumPy 복사 및 조회  (0) 2021.09.11
NumPy 배열 모양 변경  (0) 2021.09.10
NumPy 기본 옵션 및 함수  (0) 2021.09.08
NumPy 활용 기초 코드 작성  (0) 2021.09.07
NumPy 기초  (0) 2021.09.06

댓글