딥러닝/라이브러리

[라이브러리]Numpy

알케이88 2025. 7. 9. 14:28

NumPy란?

  • Numerical Python의 줄임말
  • 수치 계산을 빠르게 처리하는 파이썬 라이브러리
  • 배열이나 행렬 계산에 필요한 함수 제공
  • 수열 데이터를 다룰 때 용이
  • 다치원 배열(Array)를 다룰때 주로 사용(인공신경망, 비정형 데이터 처리, 자연어 처리등)

 

왜 쓰일까?

기능 설명
💨 빠른 계산 리스트보다 훨씬 빠름 – 내부적으로 C로 구현됨
📏 다차원 배열 지원 1차원~n차원 배열까지 쉽게 다룸
📊 수학 함수 평균, 표준편차, 행렬곱, 통계 등 계산 용이
🧮 선형대수 벡터, 행렬 계산 필수 도구
🤝 pandas와 연동 pandas의 데이터 구조도 numpy 배열 기반임

 

언제 쓰지?

 

  • 수학 계산, 벡터/행렬 연산이 필요한 딥러닝, 통계, 데이터 분석
  • pandas, sklearn, tensorflow, matplotlib 등 거의 모든 과학/AI 라이브러리가 numpy 기반

 

 

핵심 개념 : ndarray

NumPy의 핵심 객체는 ndarray (N-dimensional array)
"N차원 배열"이라고 생각 하자.

 

자주 쓰는 속성

속성 설명 예시
.ndim 차원 수 a.ndim → 2
.shape 배열 모양 (행, 열) a.shape → (2, 3)
.size 전체 원소 개수 a.size → 6
.dtype 데이터 타입 a.dtype → int64 등
import numpy as np

a = np.array([[1, 2, 3],
              [4, 5, 6]])

print(a.ndim)    # 차원 수: 2
print(a.shape)   # 모양: (2, 3) (2행 3열)
print(a.size)    # 전체 원소 수: 6
print(a.dtype)   # 데이터 타입: int64 (또는 시스템에 따라 int32)

 

NumPy 주요 함수 전체 정리

✅ 1. 배열 생성

함수 설명  예시
np.array() 파이썬 리스트를 배열로 변환 np.array([1, 2, 3])
np.arange() 범위 기반 배열 생성 np.arange(1, 10)
np.linspace() 균등 간격 수 생성 np.linspace(1, 10, 10)
np.zeros() 0으로 채운 배열 생성 np.zeros((3, 4))
np.ones() 1로 채운 배열 생성 np.ones(5)
np.full() 지정한 값으로 채운 배열 생성 np.full((2, 2), 7)
np.eye() 단위 행렬 생성 np.eye(5)
np.random.rand() 0~1 균일 분포 난수 생성 np.random.rand(2, 3)
np.random.randint() 정수 난수 배열 생성 np.random.randint(10, size=(3, 4))

 

✅ 2. 배열 정보 확인

속성 설명 예시
.ndim 차원 수 a.ndim → 2
.shape 배열 모양 (행, 열) a.shape → (2, 3)
.size 전체 원소 수 a.size
.dtype 데이터 타입 a.dtype
.itemsize 원소 하나의 바이트 크기 a.itemsize

 

✅ 3. 배열 인덱싱 & 슬라이싱

구문 설명 예시
a[i] 1차원 요소 접근 a[0]
a[i, j] 2차원 요소 접근 a[1, 2]
a[:, j] 열 슬라이싱 a[:, 1]
a[i, :] 행 슬라이싱 a[0, :]
a[::2] 간격 슬라이싱 a[::2]

 

✅ 4. 배열 연산

함수/연산 설명 예시
+, -, *, / 요소별 사칙연산 a * 2, a + b
np.dot() 행렬 곱 np.dot(a, b)
.T 전치 (transpose) a.T
np.transpose() 전치 (함수형) np.transpose(a)
np.reshape() 배열 모양 변경 a.reshape(3, 2)

 

✅ 5. 통계/집계 함수

함수 설명 예시
np.sum() 합계 np.sum(a)
np.mean() 평균 np.mean(a)
np.std() 표준편차 np.std(a)
np.var() 분산 np.var(a)
np.min() / np.max() 최소/최대값 np.min(a), np.max(a)
np.argmin() / np.argmax() 최소/최대 인덱스 np.argmax(a)
np.argsort() 정렬 인덱스 반환 np.argsort(a)

 

✅ 6. 논리 연산 & 조건

함수/연산 설명 예시
a > 5 조건 필터링 a[a > 5]
np.where() 조건에 따라 선택 np.where(a > 15, '15초과', '15 이하')
np.any() 하나라도 True np.any(a > 10)
np.all() 모두 True np.all(a < 100)

 

✅ 7. 배열 복사 & 병합

함수 설명 예시
a.copy() 배열 복사 b = a.copy()
np.concatenate() 배열 이어붙이기 np.concatenate([a, b], axis=0)
np.vstack() 수직 방향 연결 np.vstack((a, b))
np.hstack() 수평 방향 연결 np.hstack((a, b))
np.split() 배열 분할 np.split(a, 2)

 

✅ 8. 선형대수

함수 설명 예시
np.linalg.inv() 역행렬 계산 np.linalg.inv(A)
np.linalg.det() 행렬식(Determinant) 계산 np.linalg.det(A)

 

✅ 9. 난수 생성 및 셔플

함수 설명 예시
np.random.rand() 0~1 균일 분포 np.random.rand(2, 3)
np.random.randint() 정수 난수 생성 np.random.randint(1, 10, size=(2, 2))
np.random.shuffle() 배열 섞기 (1차 축 기준) np.random.shuffle(a)

 

✅ 10. 기타 자주 쓰는 함수

함수 설명 예시
np.unique() 고유값 추출 np.unique(a)
np.sort() 정렬 np.sort(a)
np.argsort() 정렬 후 인덱스 반환 np.argsort(a)
np.isnan() NaN 여부 확인 np.isnan(a)
np.clip() 값 제한 (자르기) np.clip(a, 0, 1)
np.round() 반올림 np.round(a, 2)
tolist() 배열을 파이썬 리스트로 변환 a.tolist()

브로드캐스트

1. 브로드캐스팅이란?

서로 다른 모양(Shape)의 배열끼리 연산시, 

NumPy가 자동으로 크기를 확장해서 연산이 가능하도록 해주는 기능.

import numpy as np

a = np.array([1, 2, 3])
b = 10
a + b
# 결과: array([11, 12, 13])

파이썬 list라면 불가능한 연산인데, b = 10을 [10, 10, 10]으로 자동 확장해서 연산했기 때문에 NumPy는 된다. 

 

2. 브로드캐스팅의 규칙

조건 의미
두 축의 크기가 같다 ✅ 연산 가능
한쪽이 1이다 ✅ 해당 축이 반복(broadcast)됨
그 외 ❌ 오류 발생

 

3. 브로드캐스팅 장점

항목 내용
코드 간결성 for문 없이 전체 연산 가능
속도 향상 내부적으로 C 언어로 최적화
벡터화 지원 머신러닝/딥러닝에 최적화

 

4. 시각화 요약

A Shape B Shape 가능? 최종 Shape
(3, 1) (1, 4) (3, 4)
(2, 3) (3,) (2, 3)
(2, 3) (3, 1) 오류
(2, 3) (2, 1) (2, 3)

 

※ (2,3) (3,1) 이 오류가 발생 하는 이유

차원 순서 A 차원 B 차원 결과 
마지막 차원 (열) 3 1 ✅ OK → 1이므로 확장 가능
첫 번째 차원 (행) 2 3 ❌ 다르고, 둘 다 ≠ 1 → 불일치
A (2, 3)
[[1, 2, 3],
 [4, 5, 6]]

B (3, 1)
[[10],
 [20],
 [30]]

 

  • (2,3) vs (3,1)은 **행 방향(첫 번째 차원)**에서 크기가 달라도 둘 다 1이 아니므로 브로드캐스팅 불가.
  • NumPy는 자동 복사할 수 있는 경우만 허용하지, 억지로 늘리지 않음

 

 

 

이미지 출처 : https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fc07DsJ%2FbtqBS6q8SL6%2FAAAAAAAAAAAAAAAAAAAAALUOZyuvgHcckMcB6YaUnB5bPbv611IMZK-rcjBgLYje%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1767193199%26allow_ip%3D%26allow_referer%3D%26signature%3Da7LUl%252Fm2gijDddHNv09vt7L7y%252Bg%253D

'딥러닝 > 라이브러리' 카테고리의 다른 글

딥러닝 라이브러리 종류  (0) 2025.07.09
[라이브러리] Numpy VS PANDAS  (4) 2025.07.09
[라이브러리]Pandas  (6) 2025.07.09