[Python] 배열 반복하기 Iterating Arrays – Numpy Tutorial 4

배열 반복하기(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

최신글

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.