[Numpy] 배열(Array) 인덱싱

Hunie_07·2026년 3월 2일

Numpy

목록 보기
5/8
post-thumbnail

📌 Array 인덱싱 / 슬라이싱

  • 인덱싱(indexing) : 배열의 위치나 조건을 지정해 배열의 원소를 선택하는 것
  • 슬라이싱(slicing) : 범위를 지정해 배열의 원소를 선택하는 것

📌 Array 인덱싱

1️⃣ 1차원 배열의 인덱싱

arr1 = np.arange(1, 11)
arr1

- 출력

array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

1) 배열명[위치]

  • 파이썬의 인덱싱과 동일
  • 0번째로 시작
# 0번째 요소
arr1[0]

- 출력

np.int64(1)

# 마지막 요소
arr1[-1]

- 출력

np.int64(10)

2) 배열명[[위치1, 위치2, ... ,위치n]]

  • 여러 위치의 요소를 반환
# 1, 3, 4번째 요소
arr1[[1, 3, 4]]

- 출력

array([2, 4, 5])

2️⃣ 2차원 배열의 인덱싱

arr2 = np.arange(1, 13).reshape(3, 4)
arr2

- 출력

array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])

1-1) 배열명[행위치, 열위치]

  • 지정한 행, 열에 위치한 요소를 반환한다. 이때 행위치와 열위치도 0번째부터 시작한다.
# 2차원 행렬에서 인덱싱을 위해 2개의 인자를 [행, 열] 로 구분해서 참조
arr2[2, 1]

- 출력

np.int64(10)

# 마지막 행의 0번째 요소
arr2[-1, 0]

- 출력

np.int64(9)

1-2) 배열명[행위치][열위치]

  • 혹은 다음과 같이 작성할 수도 있다.
# 2차원 행렬에서 인덱싱을 위해 2개의 인자를 [행][열] 두 개 사용해서 참조
arr2[2][1]

- 출력

np.int64(10)

# 마지막 행의 0, 2번째 요소
arr2[-1][[0, 2]]

- 출력

array([ 9, 11])

2-1) 2차원배열명[행위치]

  • 2차원 배열에서 지정한 행 전체를 선택
# 1번째 행 
arr2[1]

- 출력

array([5, 6, 7, 8])

2-2) 2차원 배열의 행 전체 변경

  • 앞서 지정한 행 전체 요소를 변경할 수 있다.
arr2[1] = np.array([50, 60, 70, 80])
arr2

- 출력

array([[ 1,  2,  3,  4],
       [50, 60, 70, 80],
       [ 9, 10, 11, 12]])

3) 배열명[[행위치1, 행위치2, ..., 행위치n],[열위치1, 열위치2,...,열위치n]]

  • 지정한 (행위치1, 열위치1), (행위치2, 열위치2), ... ,(행위치n, 열위치n)의 원소를 가진 행렬을 반환
# 1행 0열 / 2행 2열
arr2[[1, 2], [0, 2]]

- 출력

array([50, 11])

4) 배열명[조건]

  • 배열에서 조건을 만족하는 원소만 선택

조건식 결과 출력

  • 조건식을 입력할 경우 True / False 를 반환한다.
1 > 0

- 출력

True
  • 배열의 경우도 조건식을 입력할 경우 각각의 요소들의 조건식 충족 여부에 따라 True / False 를 반환한다.
# 10보다 큰 요소
arr2 > 10

- 출력

array([[False, False, False, False],
       [ True,  True,  True,  True],
       [False, False,  True,  True]])

  • 배열명[조건] 을 통해 조건식에서 True 를 반환한 위치의 값들을 반환한다.
arr2[arr2 > 10]

- 출력

array([50, 60, 70, 80, 11, 12])

3️⃣ Boolean 인덱싱 (Mask)

  • 다차원의 인덱싱을 응용하여 boolean 인덱싱
  • boolean 인덱싱을 통해 만들어낸 배열을 통해 원하는 행 또는 열의 값만 추출
  • 가리고 싶은 부분은 가리고, 원하는 요소만 추출
  • 조건 기반 필터링

예시 배열

names = np.array(['Beomwoo','Beomwoo','Kim','Joan','Lee','Beomwoo', 'Park','Beomwoo'])
# np.random.randn(8,4) : 표준정규분포를 하는 난수발생 N(0, 1) (평균은 0, 표준편차 1)
data = np.random.randn(8, 4)
data

- 출력

array([[-0.16702497,  0.24584574,  0.68971859, -0.58364965],
       [ 0.44478601,  0.32438835, -0.00510656,  0.66195306],
       [ 0.11554351,  0.77763398, -0.44039017, -1.26708853],
       [-0.8143724 ,  0.54717207, -0.53566061,  1.49591579],
       [-0.29348962, -0.27985945, -1.30778708, -2.87336747],
       [ 0.0829002 ,  0.45329629, -0.16386327, -1.1753417 ],
       [ 0.213486  ,  0.26226505, -1.45639872,  0.05181792],
       [-2.22247099, -3.02353214, -0.2508793 ,  0.27356829]])

요소가 Beomwoo 인 항목에 대한 mask 생성

# 요소가 Beomwoo인 항목에 대한 mask 생성
mask = (names == 'Beomwoo')
mask

- 출력

array([ True,  True, False, False, False,  True, False,  True])

Beomwoo 데이터 추출

# Beomwoo 데이터만 가져오기
data[mask]

- 출력

array([[-0.16702497,  0.24584574,  0.68971859, -0.58364965],
       [ 0.44478601,  0.32438835, -0.00510656,  0.66195306],
       [ 0.0829002 ,  0.45329629, -0.16386327, -1.1753417 ],
       [-2.22247099, -3.02353214, -0.2508793 ,  0.27356829]])

Kim 또는 Park 인 항목에 대한 mask 생성

# Kim 또는 Park의 데이터 가져오기
(names == 'Kim') | (names == 'Park')

- 출력

array([False, False,  True, False, False, False,  True, False])

Kim 이면서 Park 인 항목에 대한 mask 생성

(names == 'Kim') & (names == 'Park')

- 출력

array([False, False, False, False, False, False, False, False])

4️⃣ Fancy 인덱싱

  • 배열에 리스트나 ndarray로 인덱스 집합을 지정하여 요소 참조
  • 위치 기반 인덱싱 : 정수 인덱스 배열을 사용해 원하는 위치 원소를 직접 선택

예시 배열

arr = np.arange(1, 25).reshape(4, 6)
arr

- 출력

array([[ 1,  2,  3,  4,  5,  6],
       [ 7,  8,  9, 10, 11, 12],
       [13, 14, 15, 16, 17, 18],
       [19, 20, 21, 22, 23, 24]])

  • 원하는 요소를 인덱싱하여 리스트로 생성
[arr[0,0], arr[1,1], arr[2,2], arr[3,3]]

- 출력

[np.int64(1), np.int64(8), np.int64(15), np.int64(22)]

  • Fancy Indexing 을 활용한 요소 리스트 생성
# Fancy Indexing 1
arr[[0, 1, 2, 3], [0, 1, 2, 3]]

- 출력

array([ 1,  8, 15, 22])
# Fancy Indexing 2
arr[1:3, 0:2]

- 출력

array([[ 7,  8],
       [13, 14]])

0개의 댓글