인덱싱, 슬라이싱 및 고급 인덱싱
고급 인덱싱 기법으로 배열 요소에 액세스하고 수정합니다.
인덱싱, 슬라이싱 및 고급 인덱싱은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
기본 인덱싱
0부터 시작하는 정수 인덱스로 요소에 접근합니다. 음수 인덱스는 끝에서부터 셉니다. 다차원 배열에서는 쉼표로 구분된 인덱스를 사용합니다.
import numpy as np
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr[0, 2]) # 3
print(arr[-1, -1]) # 9
print(arr[1]) # [4 5 6]슬라이싱
start:stop:step 형식의 슬라이싱은 뷰를 반환합니다. 각 차원에 독립적으로 적용됩니다.
import numpy as np
m = np.arange(16).reshape(4,4)
print(m[1:3, 1:3])
# [[5 6]
# [9 10]]
print(m[::2, ::2]) # every other row and column불리언 인덱싱(마스킹)
같은 형태의 불리언 배열을 전달하면 True인 위치의 요소를 선택할 수 있습니다.
import numpy as np
arr = np.array([1, -2, 3, -4, 5])
mask = arr > 0
print(mask) # [ True False True False True]
print(arr[mask]) # [1 3 5]
arr[~mask] = 0 # set negatives to 0
print(arr) # [1 0 3 0 5]정수 배열을 사용한 고급 인덱싱
정수 인덱스 배열을 전달하면 여러 개의 특정 요소를 선택할 수 있습니다.
import numpy as np
arr = np.array([10, 20, 30, 40, 50])
idx = np.array([0, 2, 4])
print(arr[idx]) # [10 30 50]
# 2-D fancy indexing:
m = np.arange(9).reshape(3,3)
print(m[[0,2], [0,2]]) # [m[0,0], m[2,2]] = [0, 8]인덱스 선택을 위한 np.where
인수를 하나만 전달한 np.where(condition)는 condition이 True인 위치의 인덱스를 반환합니다.
import numpy as np
arr = np.array([5, 2, 8, 1, 9])
idx = np.where(arr > 4)[0]
print(idx) # [0 2 4]
print(arr[idx]) # [5 8 9]np.take와 np.put
np.take(arr, indices)는 요소를 선택하며, 평탄화된 인덱싱을 지원합니다. np.put(arr, indices, values)는 값을 삽입합니다.
import numpy as np
arr = np.array([10, 20, 30, 40])
print(np.take(arr, [1, 3])) # [20 40]
np.put(arr, [0, 2], [99, 88])
print(arr) # [99 20 88 40]np.nonzero
np.nonzero(arr)는 차원마다 하나씩 배열을 담은 튜플을 반환합니다. 각 배열에는 0이 아닌 요소의 인덱스가 들어 있습니다.
import numpy as np
arr = np.array([[0,1,0],[2,0,3]])
rows, cols = np.nonzero(arr)
print(rows, cols) # [0 1 1] [1 0 2]줄임표 인덱싱
...(Ellipsis)는 남은 차원을 모두 다루는 데 필요한 수만큼 :로 확장됩니다.
import numpy as np
arr = np.ones((2,3,4,5))
print(arr[0, ..., 2].shape) # (3, 4) — first dim=0, last dim=2
print(arr[..., 0].shape) # (2, 3, 4) — last dim=0외부 인덱싱을 위한 np.ix_
np.ix_는 여러 1차원 시퀀스로부터 외적 방식의 고급 인덱싱에 사용할 열린 메시를 구성합니다.
import numpy as np
m = np.arange(25).reshape(5,5)
rows = [0, 2, 4]
cols = [1, 3]
print(m[np.ix_(rows, cols)])
# [[ 1 3]
# [11 13]
# [21 23]]고급 인덱스에 할당하기
고급 인덱스로 선택한 항목에 제자리에서 값을 할당할 수 있습니다.
import numpy as np
arr = np.zeros(5)
arr[[1, 3]] = [10, 20]
print(arr) # [ 0. 10. 0. 20. 0.]
# Broadcast a scalar:
arr[[0, 2, 4]] = 99
print(arr) # [99. 10. 99. 20. 99.]인덱싱에서 뷰와 복사본의 차이
기본 인덱싱/슬라이스 인덱싱 → 뷰(수정하면 원본이 변경됨). 고급 인덱싱/불리언 인덱싱 → 복사본(수정해도 원본이 변경되지 않음).
import numpy as np
arr = np.arange(5)
view = arr[1:4] # view
view[0] = 99
print(arr) # [0 99 2 3 4]
copy = arr[[1,2,3]] # fancy → copy
copy[0] = 0
print(arr) # unchanged빠른 확인
불리언 인덱싱이나 고급 인덱싱은 뷰를 반환하나요, 복사본을 반환하나요?
복습
단일 요소에는 [row, col]을, 슬라이스에는 start:stop:step을 사용합니다. 슬라이스는 뷰를 반환하고, 불리언 배열과 정수 배열을 사용한 고급 인덱싱은 복사본을 반환합니다. 인덱스를 얻으려면 np.where를, 외부 메시를 만들려면 np.ix_를 사용합니다.
자주 묻는 질문
“인덱싱, 슬라이싱 및 고급 인덱싱” 강의는 무료인가요?
네 — “인덱싱, 슬라이싱 및 고급 인덱싱” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“인덱싱, 슬라이싱 및 고급 인덱싱”에서 뭘 배우나요?
고급 인덱싱 기법으로 배열 요소에 액세스하고 수정합니다. 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Python Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“인덱싱, 슬라이싱 및 고급 인덱싱” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- NumPy 배열과 dtypes
- 배열 연산과 브로드캐스팅
- 인덱싱, 슬라이싱 및 고급 인덱싱
- NumPy를 활용한 선형대수