NumPy 인덱싱/슬라이싱/이터레이팅

파이썬 리스트와 다른 시퀀스들과 비슷하게, NumPy의 1차원 어레이를 인덱싱, 슬라이싱, 이터레이팅 (반복)할 수 있습니다.


인덱싱 (Indexing)

인덱스를 이용해서 어레이의 요소에 접근합니다.

예제

import numpy as np

a = np.arange(10)**2

# Indexing
print(a[2])
print(a[-1])
4
81

슬라이싱 (Slicing)

파이썬에서와 동일하게 어레이를 슬라이스할 수 있습니다.

예제

import numpy as np

a = np.arange(10)**2

# Slicing
print(a[2:5])
print(a[:4:2])  # equal to a[0:4:2]
print(a[4::2])  # eqaul to a[4:len(a):3]

print(a[::-1])  # reversed array
[ 4  9 16]
[0 4]
[16 36 64]
[81 64 49 36 25 16  9  4  1  0]

이터레이팅 (Iterating)

파이썬의 다른 반복 가능한 (iterable) 시퀀스와 마찬가지로 NumPy 어레이도 반복 (iterate)할 수 있습니다.

예제

import numpy as np

a = np.arange(10)**2

# Iterating
for i in a:
  print(i * 2)
0
2
8
18
32
50
72
98
128
162


다차원 어레이는 축당 하나의 인덱스를 가집니다. 이 인덱스들은 콤마 (comma)로 구분된 튜플의 형태로 주어집니다.

예제

import numpy as np

def f(x, y):
  return x + y

b = np.fromfunction(f, (5, 4), dtype=int)

print(b)
print(b[2, 3])      # element of third row, fourth column

print(b[0:5, 1])    # second column
print(b[:, 1])      # second column
print(b[1:3, :])    # second~third row
[[0 1 2 3]
 [1 2 3 4]
 [2 3 4 5]
 [3 4 5 6]
 [4 5 6 7]]
5
[1 2 3 4 5]
[1 2 3 4 5]
[[1 2 3 4]
 [2 3 4 5]]

축의 개수에 비해 적은 수의 인덱스가 입력되면 부족한 인덱스는 ‘ : ‘로 인식됩니다.

예제

import numpy as np

def f(x, y):
  return x + y

b = np.fromfunction(f, (5, 4), dtype=int)

print(b[-1])
[4 5 6 7]

인덱스 튜플을 완성하기 위해 점들(…)을 사용할 수 있습니다.

예를 들어, 어레이 x가 5개의 축을 갖는다고할 때,

- x[1, 2, …]는 x[1, 2, :, :, :]와 같습니다.
- x[…, 3]은 x[:, :, :, :, 3]과 같습니다.
- x[4, …, 5, :]는 x[4, :, :, 5, :]와 같습니다.

다차원 어레이의 이터레이팅은 첫번째 축을 기준으로 이루어집니다.

예제

import numpy as np

def f(x, y):
  return x + y

b = np.fromfunction(f, (5, 4), dtype=int)

for row in b:
  print(row)
[0 1 2 3]
[1 2 3 4]
[2 3 4 5]
[3 4 5 6]
[4 5 6 7]


하지만 어레이의 각 요소에 대해 연산을 수행하고 싶다면, flat 속성을 사용할 수 있습니다.

예제

import numpy as np

def f(x, y):
  return x + y

b = np.fromfunction(f, (5, 4), dtype=int)

print(b)

for element in b.flat:
  print(element)
[[0 1 2 3]
 [1 2 3 4]
 [2 3 4 5]
 [3 4 5 6]
 [4 5 6 7]]
0
1
2
3
1
2
3
4
2
3
4
5
3
4
5
6
4
5
6
7


이전글/다음글