본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
Ch 15. 심화 : 다양한 파이썬 라이브러리 활용으로 Go~ Go
Numpy는 파이썬에서 수치 계산을 위한 핵심 라이브러리이다. 특히 다차원 배열 객체인 ndarray를 통하여 효율적인 배열 연산을 제공한다. 대용량 데이터를 빠르게 처리할 수 있어 데이터 과학, 머신러닝, 과학 계산 분야에서 필수적으로 활용된다.
1. ndarray (N-차원 배열)
Numpy의 가장 중요한 특징은 ndarray 객체이다. 파이썬의 리스트와 달리, ndarray는 동일한 타입의 요소들로 구성되며 메모리에 연속적으로 저장된다. 이로 인해 훨씬 빠른 연산이 가능하다.
주요 속성:
- ndim: 배열의 차원 수
- shape: 각 차원의 크기를 튜플로 표시
- size: 배열의 전체 요소 개수
- dtype: 배열 요소의 데이터 타입
예제 코드: ndarray 생성 및 속성 확인
import numpy as np
# 1차원 배열 (벡터)
arr1 = np.array([1, 2, 3, 4, 5])
print("arr1:", arr1)
print("차원 수 (ndim):", arr1.ndim)
print("크기 (shape):", arr1.shape)
print("요소 개수 (size):", arr1.size)
print("데이터 타입 (dtype):", arr1.dtype)
print("-" * 30)
# 2차원 배열 (행렬)
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print("arr2:\n", arr2)
print("차원 수 (ndim):", arr2.ndim)
print("크기 (shape):", arr2.shape)
print("요소 개수 (size):", arr2.size)
print("데이터 타입 (dtype):", arr2.dtype)
2. 배열 생성 함수
Numpy는 다양한 방식으로 배열을 생성할 수 있는 함수들을 제공한다.
- np.zeros(): 모든 요소가 0인 배열 생성
- np.ones(): 모든 요소가 1인 배열 생성
- np.full(): 특정 값으로 채워진 배열 생성
- np.arange(): 특정 범위의 숫자로 배열 생성 (Python range와 유사)
- np.linspace(): 시작과 끝을 포함하여 균일한 간격의 숫자로 배열 생성
- np.eye() / np.identity(): 단위 행렬 생성
- np.random.rand() / np.random.randn() / np.random.randint(): 무작위 값으로 배열 생성
예제 코드: 배열 생성 함수
# 0으로 채워진 3x3 배열
zeros_arr = np.zeros((3, 3))
print("zeros_arr:\n", zeros_arr)
# 1로 채워진 2x4 배열
ones_arr = np.ones((2, 4))
print("ones_arr:\n", ones_arr)
# 7로 채워진 2x2 배열
full_arr = np.full((2, 2), 7)
print("full_arr:\n", full_arr)
# 0부터 9까지 10개의 숫자 배열
range_arr = np.arange(10)
print("range_arr:", range_arr)
# 0부터 10까지 5개의 균일한 간격 숫자 배열
linspace_arr = np.linspace(0, 10, 5)
print("linspace_arr:", linspace_arr)
# 3x3 단위 행렬
identity_mat = np.eye(3)
print("identity_mat:\n", identity_mat)
# 0부터 100 미만의 정수 5개 (랜덤)
random_int_arr = np.random.randint(0, 100, 5)
print("random_int_arr:", random_int_arr)
3. 배열 인덱싱 및 슬라이싱
Numpy 배열은 파이썬 리스트와 유사하게 인덱싱 및 슬라이싱을 지원하며, 다차원 배열에 특화된 기능을 제공한다.
예제 코드: 인덱싱 및 슬라이싱
arr = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
print("원본 배열:\n", arr)
# 단일 요소 접근 (두 번째 행, 세 번째 열)
print("arr[1, 2]:", arr[1, 2]) # 결과: 7
# 행 슬라이싱 (첫 번째 행부터 두 번째 행까지)
print("arr[0:2, :]:\n", arr[0:2, :]) # 모든 열
# 열 슬라이싱 (모든 행, 두 번째 열부터 끝까지)
print("arr[:, 1:]:\n", arr[:, 1:])
# 불리언 인덱싱 (값이 5보다 큰 요소만 추출)
print("arr[arr > 5]:", arr[arr > 5])
4. 배열 연산 ➕➖✖️➗
Numpy의 가장 강력한 기능 중 하나는 벡터화된(vectorized) 연산이다. for 루프 없이 배열 전체에 대하여 빠르고 효율적으로 연산을 수행할 수 있다.
기본 산술 연산:
- 배열 간의 연산은 **요소별(element-wise)**로 수행된다.
- 브로드캐스팅(Broadcasting): 크기가 다른 배열 간의 연산을 가능하게 하는 Numpy의 유연한 규칙.
예제 코드: 배열 연산
arr_a = np.array([[1, 2], [3, 4]])
arr_b = np.array([[5, 6], [7, 8]])
print("arr_a:\n", arr_a)
print("arr_b:\n", arr_b)
# 덧셈 (요소별)
print("arr_a + arr_b:\n", arr_a + arr_b)
# 곱셈 (요소별)
print("arr_a * arr_b:\n", arr_a * arr_b)
# 스칼라 곱셈
print("arr_a * 2:\n", arr_a * 2)
# 행렬 곱셈 (@ 연산자 또는 np.dot())
print("arr_a @ arr_b:\n", arr_a @ arr_b)
print("np.dot(arr_a, arr_b):\n", np.dot(arr_a, arr_b))
# 브로드캐스팅 예시
arr_c = np.array([10, 20])
print("arr_a + arr_c:\n", arr_a + arr_c) # arr_c가 각 행에 브로드캐스팅되어 더해짐
5. 통계 및 선형대수 함수
Numpy는 통계 계산과 선형대수 연산을 위한 다양한 내장 함수를 제공한다.
- np.sum(): 합계
- np.mean(): 평균
- np.std(): 표준편차
- np.max() / np.min(): 최댓값 / 최솟값
- np.transpose() / .T: 전치 행렬
- np.linalg.inv(): 역행렬
- np.linalg.det(): 행렬식
예제 코드: 통계 및 선형대수
arr = np.array([[1, 2, 3], [4, 5, 6]])
print("원본 배열:\n", arr)
# 전체 요소의 합
print("총합:", np.sum(arr))
# 각 열의 합 (axis=0)
print("각 열의 합:", np.sum(arr, axis=0))
# 각 행의 평균 (axis=1)
print("각 행의 평균:", np.mean(arr, axis=1))
# 최댓값
print("최댓값:", np.max(arr))
print("-" * 30)
mat = np.array([[1, 2], [3, 4]])
print("원본 행렬:\n", mat)
# 전치 행렬
print("전치 행렬 (mat.T):\n", mat.T)
# 역행렬 (만약 행렬식이 0이면 에러 발생)
try:
inv_mat = np.linalg.inv(mat)
print("역행렬:\n", inv_mat)
# 역행렬 * 원본 행렬 = 단위 행렬에 가까움
print("원본 * 역행렬:\n", np.dot(mat, inv_mat))
except np.linalg.LinAlgError as e:
print(f"역행렬 계산 오류: {e}")
# 행렬식
print("행렬식:", np.linalg.det(mat))
6. 배열 형태 변경 (Reshaping)
reshape() 함수를 사용하여 배열의 차원 수를 변경하거나, 배열의 크기를 유지하면서 형태를 바꿀 수 있다.
예제 코드: Reshaping
arr = np.arange(1, 10) # 1부터 9까지의 1차원 배열
print("원본 1차원 배열:", arr)
# 3x3 2차원 배열로 변경
reshaped_arr = arr.reshape(3, 3)
print("3x3 배열로 변경:\n", reshaped_arr)
# 2차원 배열을 1차원 배열로 평탄화
flattened_arr = reshaped_arr.flatten()
print("평탄화된 배열:", flattened_arr)
# -1을 사용하여 자동으로 크기 계산
reshaped_auto = arr.reshape(3, -1) # 3행, 열의 수는 자동으로 결정
print("자동으로 크기 계산:\n", reshaped_auto)
오늘의 실습
#패스트캠퍼스 #환급챌린지 #패스트캠퍼스후기 #습관형성 #직장인자기계발 #오공완
https://fastcampus.info/4n8ztzq
(~6/20) 50일의 기적 AI 환급반💫 | 패스트캠퍼스
초간단 미션! 하루 20분 공부하고 수강료 전액 환급에 AI 스킬 장착까지!
fastcampus.co.kr
'개발공부 > python' 카테고리의 다른 글
패스트캠퍼스 환급챌린지 14일차 : 한 번에 끝내는 컴퓨터 공학 & 인공지능 복수전공 초격차 패키지 강의 후기 (0) | 2025.07.14 |
---|---|
패스트캠퍼스 환급챌린지 13일차 : 한 번에 끝내는 컴퓨터 공학 & 인공지능 복수전공 초격차 패키지 강의 후기 (0) | 2025.07.13 |
패스트캠퍼스 환급챌린지 12일차 : 한 번에 끝내는 컴퓨터 공학 & 인공지능 복수전공 초격차 패키지 강의 후기 (0) | 2025.07.12 |
패스트캠퍼스 환급챌린지 11일차 : 한 번에 끝내는 컴퓨터 공학 & 인공지능 복수전공 초격차 패키지 강의 후기 (0) | 2025.07.11 |
패스트캠퍼스 환급챌린지 10일차 : 한 번에 끝내는 컴퓨터 공학 & 인공지능 복수전공 초격차 패키지 강의 후기 (0) | 2025.07.10 |