[Python Numpy] 반복자 enumerate() vs. 다차원 반복자np.ndenumerate()
Python 분석과 프로그래밍/Python 데이터 전처리 2023. 3. 5. 21:43이번 포스팅에서는 인덱스 반복자(iterator) enumerate() 와 numpy 의 다차원 배열에 대한 인덱스 반복자 (multidimensional index iterator) np.ndenumerate(arr) 메소드에 대해서 소개하겠습니다.
(1) 인덱스 반복자 (index iterator): enumerate()
(2) 다차원 배열 (multidimensional index iterator): numpy.ndenumerate(arr)
반복(iteration) 이란 일련의 작업 명령문을 반복해서 실행(repeated execution)하는 것을 말합니다. Python은 이러한 반복 작업을 더 쉽게 수행할 수 있도록 하는 여러 언어 기능이 있습니다.
반복자(iterator)는 반복할 수 있는 값의 수를 계산하는 객체입니다. Python의 데이터 유형 중에서 리스트(Lists), 튜플(Tuples), 사전형(Dictionaries), 문자열(Strings), 집합(Sets) 이 모두 반복 가능한 객체들로서, 반복자(iterator)를 가져올 수 있습니다.
(1) 인덱스 반복자 (index iterator): enumerate()
Python에서는 for loop 순환문이 종종 반복가능한 객체에 순환 반복문으로 사용이 됩니다. for loop 문을 사용하면 인덱스 또는 순환하는 횟수는 반환하지 않고, 오로지 반복가능한 객체의 원소만을 반환하게 됩니다.
아래 예에서는 리스트(list)에 for loop 문을 사용해서 리스트 안의 원소를 하나씩 순서대로 반복해서 프린트하는 코드입니다. (이때 인덱스 정보는 없음)
## (1) without index iterator
x_list = ['a', 'b', 'c', 'd']
for x in x_list:
print('item:', x)
# item: a
# item: b
# item: c
# item: d
만약 for loop 순환문을 반복가능한 객체에 사용하면서 enumerate() 메소드를 사용하면 쉽고 편리하게 인덱스 정보 (index information)을 같이 반환할 수 있습니다.
아래 예에서는 enumerate(x_list) 를 for loop 순환문과 같이 사용해서 '인덱스 정보(index information) + 리스트 내 원소 정보'를 순환하면서 반복적으로 프린트해보았습니다.
## (2) enumerate()
## : iteration with access to the index information
x_list = ['a', 'b', 'c', 'd']
print(x_list)
print('----' * 5)
for i, x in enumerate(x_list):
print('index:', i, ' item:', x)
# ['a', 'b', 'c', 'd']
# --------------------
# index: 0 item: a
# index: 1 item: b
# index: 2 item: c
# index: 3 item: d
(2) 다차원 배열 (multidimensional index iterator): numpy.ndenumerate(arr)
numpy 의 다차원 배열 (multidimensional array)에 대해서 위의 (1) enumerate() 메소드가 했던 것처럼 반복 가능한 객체에 대해 인덱스 정보를 가져오고 싶다면 numpy.ndenumerate(arr) 메소드를 사용하면 됩니다.
아래 예에서는 3차원 배열(3 dimensional array) 에 대해서 for loop 순환문과 np.ndenumerate(arr) 메소드를 같이 사용해서 3차원 배열의 인덱스 정보 (index information of 3 dimensional array) 와 원소를 순환하면서 반복적으로 프린트해보았습니다.
## numpy.ndenumerate(arr)
## : multidimensional index iterator
import numpy as np
y_3d_arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(y_3d_arr)
print('------' * 5)
for i, y in np.ndenumerate(y_3d_arr):
print('index:', i, ' item:', y)
# [[[1 2]
# [3 4]]
# [[5 6]
# [7 8]]]
# ------------------------------
# index: (0, 0, 0) item: 1
# index: (0, 0, 1) item: 2
# index: (0, 1, 0) item: 3
# index: (0, 1, 1) item: 4
# index: (1, 0, 0) item: 5
# index: (1, 0, 1) item: 6
# index: (1, 1, 0) item: 7
# index: (1, 1, 1) item: 8
반복 가능한 객체로 리스트(Lists), 튜플(Tuples), 사전형(Dictionaries), 문자열(Strings), 집합(Sets) 등이 있다고 했는데요, 아래 예에서는 다차원 리스트에 대해서 for loop 순환문과 np.ndenumerate() 메소드를 같이 사용해서 인덱스 정보와 리스트 내 원소를 순환하면서 반복적으로 인쇄를 해보았습니다.
## iterable objects: Lists, Tuples, Dictionaries, Strings, Sets
x_2d_list = [['a', 'b'], ['c', 'd']]
print(x_2d_list)
print('-----' * 5)
for i, x in np.ndenumerate(x_2d_list):
print('index:', i, ' item:', x)
# [['a', 'b'], ['c', 'd']]
# -------------------------
# index: (0, 0) item: a
# index: (0, 1) item: b
# index: (1, 0) item: c
# index: (1, 1) item: d
이번 포스팅이 많은 도움이 되었기를 바랍니다 .
행복한 데이터 과학자 되세요. :-)
'Python 분석과 프로그래밍 > Python 데이터 전처리' 카테고리의 다른 글
[Python] Pandas 함수 적용: map(), applymap(), apply() (0) | 2023.06.06 |
---|---|
[Python] 파워포인트와 PDF 파일에서 텍스트 추출하기 (0) | 2023.03.19 |
[Python pandas] DataFrame.filter(): 특정 조건에 맞는 칼럼이나 행을 선택해 가져오기 (0) | 2023.01.17 |
[Python pandas] pandas DataFrame의 데이터 유형별 칼럼 선택, 배제 (0) | 2023.01.03 |
[Python] 리스트 원소 데이터 유형 변환, 원소 값 변환, 빼기, 정렬 (0) | 2023.01.02 |