fullfish 2025. 10. 23. 16:12

Python에서 수치 계산과
행렬 연산을 빠르게 수행하기 위한 핵심 라이브러리

 

핵심 개념

ndarray: 다차원 배열 객체. 예시: np.array([1,2,3])
벡터화 연산: 반복문 없이 전체 배열에 수식 적용. 예시: a * 2, a + b
브로드캐스팅: 다른 크기의 배열끼리 자동 확장 연산. 예시: a + 3, a + [1,2,3]
dtype: 배열 요소의 자료형 지정. 예시: np.array([1,2,3], dtype=float)
shape: 배열의 차원 형태. 예시: (행, 열)
axis: 연산을 수행할 축. 예시: axis=0 (열), axis=1 (행)

 

배열 생성 함수

np.array([1, 2, 3])      # 리스트로부터 배열 생성  
np.zeros((3, 4))         # 0으로 채운 3x4 배열  
np.ones((2, 2))          # 1로 채운 배열  
np.eye(3)                # 단위 행렬  
np.arange(0, 10, 2)      # 0~9까지 2씩 증가  
np.linspace(0, 1, 5)     # 0~1 사이를 균등분할  retstep=True: 간격나옴
np.random.rand(2, 3)     # 0~1 사이 난수 (균등분포)  
np.random.randn(2, 3)    # 정규분포 난수
np.random.radint(0, 10, (2, 3)) # 0과 9까지의 랜덤 값을 2행 3열로

 

배열의 기본 연산

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
a + b       # 원소별 덧셈
a * b       # 원소별 곱셈
a @ b       # 행렬 곱 (dot product)
a.T         # 전치 행렬
np.sum(a)   # 모든 원소 합
np.mean(a)  # 평균
np.std(a)   # 표준편차
np.max(a, axis=0)  # 행방향(가로방향) 최댓값 [3, 4]
np.max(a, axis=1)  # 행방향(가로방향) 최댓값 [2, 4]

 

인덱싱과 슬라이싱

a = np.arange(10)
a[0]        # 첫 번째 원소
a[-1]       # 마지막 원소
a[2:6]      # 2~5번째 원소
a[::2]      # 짝수 인덱스만
b = np.array([[1,2,3], [4,5,6], [7,8,9]])
b[0, 2]     # 0행 2열 원소
b[1:, :2] # 1행 이후, 2열전(1열)까지 # [[4, 5], [7, 8]]
'''
b[행_슬라이싱, 열_슬라이싱]
b[1:, :]	1행 이후 전체 열	[[4,5,6],[7,8,9]]
b[:, :2]	전체 행에서 0~1열	[[1,2],[4,5],[7,8]]
b[1:, :2]	1행 이후, 0~1열	[[4,5],[7,8]]
'''

 

조건 필터링, 블리언 인덱싱, 행렬 조작

a = np.array([10, 20, 30, 40])
a[a > 20]          # [30, 40]
np.where(a > 20, 1, 0)  # 조건에 따라 1, 0 변환
a = np.arange(6).reshape(2,3) # [[0, 1, 2], [3, 4, 5]]
a.reshape(3,2) # [[0, 1], [2, 3], [4, 5]]
a.flatten()          # 1차원으로
np.concatenate([a,a], axis=0)  # 행 방향(세로방향) 결합
np.hstack([a,a])     # 열(가로방향) 방향 결합
np.vstack([a,a])     # 행 방향 결합

 

통계 및 수학 함수

x = np.array([1, 2, 3, 4, 5])
y = np.array([4, 5, 6, 7, 8])

np.min(x)        # 최솟값
# 1

np.max(x)        # 최댓값
# 5

np.mean(x)       # 평균(산술평균)
# 3.0

np.median(x)     # 중앙값(데이터 중앙에 위치한 값)
# 3.0

np.var(x)        # 분산(평균으로부터 퍼진 정도)
# 2.0

np.std(x)        # 표준편차(분산의 제곱근, 데이터 흩어짐 정도)
# 1.4142135623730951

np.corrcoef(x, y)  # 상관계수(-1에서 1 사이, 두 변수의 상관성)
# array([[1., 1.],
#        [1., 1.]])

np.exp(x)        # 자연상수 e의 x제곱 (e**x)
# array([  2.71828183,   7.3890561 ,  20.08553692,  54.59815003, 148.4131591 ])

np.log(x+1)      # 자연로그 ln(x+1), 0 회피용으로 +1 자주 사용
# array([0.69314718, 1.09861229, 1.38629436, 1.60943791, 1.79175947])

np.random.seed(42)               # 난수 시드 고정 (결과 재현 가능)
np.random.randint(0, 10, size=(2,3))  # 0이상 10미만 정수 난수 2x3 배열 생성
# array([[6, 3, 7],
#        [4, 6, 9]])