배열 반복하기(Iterating Arrays)
배열을 반복하는 것은 요소를 하나씩 순회하는 것을 의미한다. NumPy의 다차원 배열을 다룰 때, 파이썬의 기본 for 루프를 이용하여 쉽게 반복할 수 있다. 이번 포스팅에서는 numpy에서의 iterating를 실습할 예정이다.
1차원 배열 반복하기
1차원 배열을 반복하면 각 요소를 하나씩 확인할 수 있다.
import numpy as np
arr = np.array([1, 2, 3])
for x in arr:
print(x)
이 코드를 실행하면 다음과 같은 결과가 출력된다.
#결과
1
2
3
2차원 배열 반복하기
2차원 배열을 반복하면 모든 행을 순회하게 된다.
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x in arr:
print(x)
위 코드를 실행하면 각 행이 출력된다.
#결과
[1 2 3]
[4 5 6]
n차원 배열 반복하기
n차원 배열을 반복할 때는 n-1 번째 차원을 하나씩 순회한다. 각 차원의 실제 값, 즉 스칼라를 얻으려면 각 차원에서 배열을 반복해야 한다.
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for x in arr:
for y in x:
print(y)
먼저 제일 바깥 배열 요소를 x로 잡고, x안에 있는 요소들을 y로 잡아 출력한다. 이 코드를 실행하면 모든 스칼라 요소가 출력된다.
#결과
1
2
3
4
5
6
3차원 배열 반복하기
3차원 배열에서는 모든 2차원 배열을 순회한다.
import numpy as np
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
for x in arr:
print(x)
이 코드를 실행하면 다음과 같은 결과가 출력된다.
#결과
[[1 2 3]
[4 5 6]]
[[ 7 8 9]
[10 11 12]]
스칼라 값까지 반복하려면 위와 같이 중첩반복문을 사용하자.
import numpy as np
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
for x in arr:
for y in x:
for z in y:
print(z)
이 경우 모든 스칼라 값이 출력된다.
#결과
1
2
3
4
5
6
7
8
9
10
11
12
nditer()를 이용한 배열 반복하기
nditer() 함수는 배열의 각 요소를 반복할 때, 고차원 배열을 다룰 때 유용한 함수다. nditer는 iterating 할 때 직면하는 이슈들을 해결해준다고 한다.
각 스칼라 요소 반복하기
import numpy as np
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
for x in np.nditer(arr):
print(x)
이 코드를 실행하면 다음과 같은 결과가 출력된다. 기존에 중첩반복문을 이용해서 배열의 차원을 벗겨가며 요소들을 하나씩 출력했지만 nditer을 사용하면 코드가 간결해지고 중첩반복문에서 사용된 메모리들을 줄일 수 있다.
#결과
1
2
3
4
5
6
7
8
서로 다른 데이터 타입으로 반복하기
op_dtypes 인자를 사용하여 반복 중에 데이터 타입을 변경할 수 있다. 이 경우 flags=[‘buffered’]를 전달하여 버퍼를 활성화해야 한다.
import numpy as np
arr = np.array([1, 2, 3])
for x in np.nditer(arr, flags=['buffered'], op_dtypes=['S']):
print(x)
‘S’는 넘파이에서 사용되는 데이터 타입으로 string를 의미한다. 조금 더 자세한 내용은 아래 링크에 나와있다.
이 코드는 각 요소를 문자열로 변환하여 출력한다.
np.bytes_(b'1')
np.bytes_(b'2')
np.bytes_(b'3')
다른 단계 크기로 반복하기
필터링을 이용하여 특정 단계 크기로 반복할 수 있다.
import numpy as np
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
for x in np.nditer(arr[:, ::2]):
print(x)
arr안에 첫번째 인수는 “:”으로 처음부터 끝까지 슬라이싱, 따라서 전체 배열을 의미하고, 뒤에 start와 end가 없고 step만 2로 존재한다. 따라서 2칸씩 이동하며 출력된다. 이 코드는 2D 배열에서 홀수 인덱스의 요소만 출력된다.
#결과
1
3
5
7
ndenumerate()를 이용한 열거 반복하기
ndenumerate() 메소드는 반복하는 동안 요소의 인덱스를 함께 제공한다.
1차원 배열에서의 열거
import numpy as np
arr = np.array([1, 2, 3])
for idx, x in np.ndenumerate(arr):
print(idx, x)
이 코드는 다음과 같은 결과를 출력된다.
#결과
(0,) 1
(1,) 2
(2,) 3
2차원 배열에서의 열거
import numpy as np
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
for idx, x in np.ndenumerate(arr):
print(idx, x)
이 코드는 각 요소의 인덱스와 값을 출력된다.
#결과
(0, 0) 1
(0, 1) 2
(0, 2) 3
(0, 3) 4
(1, 0) 5
(1, 1) 6
(1, 2) 7
(1, 3) 8
참고 – w3schools
최신글
![[프로그래머스] 잘라서 배열로 저장하기 - 자바](https://develog.co.kr/wp-content/uploads/2025/01/프로그래머스-잘라서-배열로-저장하기-자바-150x150.png)
![[프로그래머스] 붕대 감기 - 자바](https://develog.co.kr/wp-content/uploads/2024/11/프로그래머스-붕대-감기-자바-150x150.png)
![[프로그래머스] 달리기 경주 - 자바](https://develog.co.kr/wp-content/uploads/2024/11/프로그래머스-달리기-경주-자바-150x150.png)