-
[2월 1주차-2/7(1)]🔥 NumPy 기초 정리: 다차원 배열과 연산 완벽 가이드Why Not SW CAMP 5기/수업 기록 2025. 2. 7. 12:27
데이터 분석과 과학 계산을 할 때 NumPy(넘파이) 는 필수 라이브러리입니다.
특히 대규모 데이터 연산과 다차원 배열을 효율적으로 처리할 수 있는 기능을 제공합니다.
이번 포스팅에서는 NumPy의 기초 개념과 다양한 연산 방법을 정리해보겠습니다! 🚀
🏗️ NumPy 배열의 기본 개념
NumPy 배열(ndarray)은 다차원 배열을 효과적으로 다루는 자료구조입니다.
파이썬의 리스트와 달리 모든 요소가 같은 데이터 타입을 가지며, 고속 연산이 가능합니다.import numpy as np lst = [2, 3, 4] num_array = np.array(lst)위 코드를 실행하면 num_array는 1차원 배열이 됩니다.
NumPy 배열은 다양한 속성을 제공하는데, 몇 가지 중요한 속성을 살펴보겠습니다.📌 NumPy 배열의 속성
print(num_array.shape) # (3,) -> 배열의 형상(크기) print(num_array.ndim) # 1 -> 배열의 차원(1D 배열) print(num_array.dtype) # int32 -> 배열의 데이터 타입 print(num_array.itemsize) # 4 -> 각 요소의 크기 (byte 단위) print(num_array.size) # 3 -> 배열의 요소 개수- shape: 배열의 형상(크기)
- ndim: 배열의 차원 수
- dtype: 배열의 데이터 타입
- itemsize: 배열의 요소 크기 (바이트 단위)
- size: 배열의 총 요소 개수
🔢 NumPy 배열 연산
NumPy 배열은 기본적으로 요소별 연산을 수행합니다.
즉, 같은 위치에 있는 요소끼리 연산이 이루어집니다.a = np.array([10, 20, 30]) b = np.array([1, 2, 3]) print(a + b) # array([11, 22, 33]) print(a - b) # array([ 9, 18, 27]) print(a * b) # array([10, 40, 90]) print(a / b) # array([10. , 10. , 10.])이처럼 NumPy는 벡터화 연산(vectorized operation)을 지원하여 반복문 없이 빠른 연산이 가능합니다.
🏹 브로드캐스팅(Broadcasting)
NumPy에서는 차원이 다른 배열끼리도 연산이 가능합니다.
이를 브로드캐스팅(Broadcasting) 이라고 하며, 작은 배열이 자동으로 확장됩니다.a = np.array([10, 20, 30]) print(a * 10) # array([100, 200, 300])📌 2차원 배열과 1차원 배열 연산
b = np.array([[10, 20, 30], [40, 50, 60]]) c = np.array([2, 3, 4]) print(b + c) ''' array([[12, 23, 34], [42, 53, 64]]) '''NumPy는 자동으로 행렬의 크기를 맞춰 연산을 수행합니다.
이러한 기능 덕분에 고속 벡터 연산이 가능하죠! 🚀
🏗️ 다차원 배열 생성
NumPy에서는 다양한 방식으로 다차원 배열을 생성할 수 있습니다.
1️⃣ 기본 배열 생성 함수
zero = np.zeros((2,3)) one = np.ones((2,3)) full = np.full((2,3), 123) eye = np.eye(4)출력 결과:
zeros: [[0. 0. 0.] [0. 0. 0.]] ones: [[1. 1. 1.] [1. 1. 1.]] full: [[123 123 123] [123 123 123]] eye (단위 행렬): [[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]]2️⃣ 연속된 숫자로 배열 생성
np.arange(0, 10, 2) # array([0, 2, 4, 6, 8]) np.linspace(0, 10, 5) # array([ 0. , 2.5, 5. , 7.5, 10. ])- arange(start, stop, step): 지정된 간격으로 배열 생성
- linspace(start, stop, num): 시작과 끝을 포함하여 균등한 간격으로 배열 생성
🔄 배열 조작과 변형
📌 배열 삽입 (insert)
a = np.array([1, 3, 4]) np.insert(a, 1, 2) # array([1, 2, 3, 4])2차원 배열에서 삽입
b = np.array([[1, 1], [2, 2], [3, 3]]) np.insert(b, 1, 4, axis=0) ''' array([[1, 1], [4, 4], [2, 2], [3, 3]]) axis = 1일 경우 [[1 4 1] [2 4 2] [3 4 3]] '''📌 배열 뒤집기 (flip)
c = np.array([[1, 2, 3], [4, 5, 6]]) np.flip(c, axis=1) ''' array([[3, 2, 1], [6, 5, 4]]) '''📌 배열 정렬 (sort)
d = np.array([[35, 24, 55], [69, 19, 9], [4, 1, 11]]) d.sort() print(d) ''' [[24 35 55] [ 9 19 69] [ 1 4 11]] ''' d.sort(axis=0) print(d) ''' [[ 1 4 11] [ 9 19 55] [24 35 69]] '''
🎭 다차원 배열 변형
📌 배열 차원 변경 (reshape)
sh = np.arange(12) r = sh.reshape(3, 4) print(r) ''' array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) '''📌 배열 1차원으로 변경 (flatten)
b = np.array([[1,1], [2,2], [3,3]]) b.flatten() # array([1, 1, 2, 2, 3, 3])
🏆 행렬 연산
📌 행렬 곱 (matmul)
a = np.array([[1, 2], [3, 4]]) b = np.array([[10, 20], [30, 40]]) np.matmul(a, b) ''' array([[ 70, 100], [150, 220]]) '''
🚀 마무리
NumPy는 데이터 과학과 머신러닝에서 필수적인 라이브러리입니다.
이번 포스팅에서는 기본적인 배열 생성부터 고급 연산까지 다뤄보았습니다.추후에는 고급 NumPy 기능과 실전 데이터 분석 활용법도 다뤄보겠습니다!
질문이나 추가 내용이 있다면 댓글로 남겨주세요! 📢🔥'Why Not SW CAMP 5기 > 수업 기록' 카테고리의 다른 글
[2월 1주차-2/7(3)]🐼 Pandas 기초부터 활용까지! 데이터 분석의 시작 📊 (0) 2025.02.07 [2월 1주차-2/7(2)]📊 상관관계 분석 및 Seaborn 활용 정리 (0) 2025.02.07 [2월 1주차-2/6(5)]🚇 지하철 시간대별 승하차 인원 분석 (1) 2025.02.06 [2월 1주차-2/6(4)]📊 파이썬을 활용한 인구 데이터 시각화(파이차트&산점도) (0) 2025.02.06 [2월 1주차-2/6(3)]📊 히스토그램 & 박스플롯 시각화 정리 (0) 2025.02.06