데이터 분석/데이터 시각화
numpy
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]])