NumPy 데이터 분석: 배열 인덱싱과 데이터 선택
배열의 인덱싱, 슬라이싱, 그리고 조건부 선택 방법
NumPy 배열에서 특정 데이터에 접근하거나 선택하는 것은 데이터 조작의 핵심입니다. 이번 글에서는 배열의 인덱싱, 슬라이싱, 그리고 조건부 선택 방법을 알아보겠습니다.
1. 배열 인덱싱 (Indexing)
NumPy 배열의 요소는 인덱스(index)를 사용하여 접근할 수 있습니다.
1) 1차원 배열 인덱싱
1차원 배열에서는 Python 리스트와 동일하게 인덱스를 사용하여 요소에 접근합니다.
1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np
# 1차원 배열 생성
arr = np.array([10, 20, 30, 40, 50])
# 특정 요소 접근
print(arr[0]) # 출력: 10
print(arr[4]) # 출력: 50
# 요소 값 변경
arr[2] = 99
print(arr) # 출력: [10 20 99 40 50]
2) 2차원 배열 인덱싱
2차원 배열에서는 행과 열의 위치를 지정하여 요소에 접근합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 2차원 배열 생성
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 특정 요소 접근
print(arr[0, 2]) # 출력: 3 (1행 3열)
print(arr[2, 1]) # 출력: 8 (3행 2열)
# 요소 값 변경
arr[1, 1] = 99
print(arr)
# 출력:
# [[ 1 2 3]
# [ 4 99 6]
# [ 7 8 9]]
3) 다차원 배열 인덱싱
다차원 배열에서도 동일한 방식으로 인덱스를 사용하여 요소를 선택합니다.
1
2
3
4
5
# 3차원 배열 생성
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
# 특정 요소 접근
print(arr[0, 1, 1]) # 출력: 4
2. 배열 슬라이싱 (Slicing)
배열 슬라이싱은 범위를 지정하여 여러 요소를 선택합니다.
1) 1차원 배열 슬라이싱
Python 리스트의 슬라이싱과 유사하게 동작합니다.
1
2
3
4
5
6
# 1차원 배열 슬라이싱
arr = np.array([10, 20, 30, 40, 50])
print(arr[1:4]) # 출력: [20 30 40]
print(arr[:3]) # 출력: [10 20 30]
print(arr[::2]) # 출력: [10 30 50]
2) 2차원 배열 슬라이싱
행과 열을 각각 슬라이싱하여 데이터를 선택합니다.
1
2
3
4
5
6
7
8
9
# 2차원 배열 생성
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 특정 행과 열 선택
print(arr[0:2, 1:3]) # 출력: [[2 3]
# [5 6]]
# 모든 행에서 특정 열 선택
print(arr[:, 1]) # 출력: [2 5 8]
3. 조건부 선택
NumPy는 조건을 사용하여 특정 조건을 만족하는 요소만 선택할 수 있습니다.
1
2
3
4
5
6
7
8
# 조건부 선택
arr = np.array([10, 20, 30, 40, 50])
# 30보다 큰 값 선택
print(arr[arr > 30]) # 출력: [40 50]
# 짝수 값 선택
print(arr[arr % 2 == 0]) # 출력: [10 20 40 50]
4. 팬시 인덱싱 (Fancy Indexing)
팬시 인덱싱은 인덱스 리스트를 사용하여 여러 위치의 요소를 동시에 선택합니다.
1
2
3
4
5
6
7
# 1차원 배열에서 팬시 인덱싱
arr = np.array([10, 20, 30, 40, 50])
print(arr[[0, 2, 4]]) # 출력: [10 30 50]
# 2차원 배열에서 팬시 인덱싱
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr2[[0, 2], [1, 2]]) # 출력: [2 9]
5. 불리언 배열 인덱싱
불리언 배열은 특정 조건을 만족하는 위치를 선택할 때 유용합니다.
1
2
3
4
5
6
# 불리언 배열 생성
arr = np.array([10, 20, 30, 40, 50])
condition = arr > 30
# 조건을 만족하는 값 선택
print(arr[condition]) # 출력: [40 50]
정리
- 인덱싱은 배열의 특정 요소에 접근하거나 값을 변경할 때 사용됩니다.
- 슬라이싱은 배열의 일부를 선택하여 새로운 배열을 생성합니다.
- 조건부 선택과 팬시 인덱싱은 데이터를 효율적으로 필터링하거나 조작하는 데 유용합니다.
- NumPy의 강력한 데이터 선택 기능을 활용하면 데이터를 다루는 작업이 훨씬 간단해집니다.
다음 글 예고:
NumPy의 데이터 조작을 위한 중요한 기술인 “배열 변환 및 조작”을 다뤄보겠습니다!
This post is licensed under CC BY 4.0 by the author.