Python

Numpy

  • -

🔢 NumPy 완전 정복! 데이터 분석의 첫 걸음

파이썬으로 숫자를 빠르게 다루고 싶다면? NumPy를 배워야 한다!


1. NumPy란 무엇인가?

**NumPy(Numerical Python)**는 파이썬에서 대규모 수치 데이터를 빠르게 처리하기 위한 라이브러리다.

데이터 과학, 머신러닝, 과학 계산 등 거의 모든 파이썬 데이터 작업의 기반이 되는 핵심 도구다.

NumPy의 핵심 자료구조는 ndarray(N차원 배열) 이다.

import numpy as np  # numpy는 외부 라이브러리이므로 반드시 임포트해야 한다

arr = np.array([1, 2, 3, 4, 5])
print(type(arr))  # <class 'numpy.ndarray'>

2. 왜 NumPy를 써야 할까?

파이썬 기본 리스트로도 숫자를 다룰 수 있다. 하지만 데이터가 많아지면 속도 차이가 크게 난다.

# ❌ 파이썬 리스트: 하나씩 반복해야 한다 (느리다!)
numbers = [1, 2, 3, 4, 5]
result = []
for num in numbers:
    result.append(num * 2)

print(result)  # [2, 4, 6, 8, 10]

# ✅ NumPy: 내부적으로 C를 이용 속도가 빠르다!
import numpy as np
numbers = np.array([1, 2, 3, 4, 5])
result = numbers * 2

print(result)  # [2 4 6 8 10]

💡 NumPy는 "수학 계산기"라고 생각하면 된다. 리스트가 일일이 손으로 계산하는 것이라면, NumPy는 계산기로 한 번에 처리하는 것이다!


3. 배열 생성하기

3-1. 기본 배열 생성

import numpy as np

# 1차원 배열
arr1d = np.array([1, 2, 3, 4, 5])
print("1차원 배열:", arr1d)
# 출력: [1 2 3 4 5]

# 2차원 배열
arr2d = np.array([[10, 20, 30], [40, 50, 60]])
print("2차원 배열:\n", arr2d)
# 출력:
# [[10 20 30]
#  [40 50 60]]

3-2. 특수 배열 생성

# 단위행렬 (대각선이 1, 나머지는 0)
eye = np.eye(3)
print(eye)
# [[1. 0. 0.]
#  [0. 1. 0.]
#  [0. 0. 1.]]

# 균등한 간격의 배열 만들기 (시작, 끝, 개수)
theta = np.linspace(0, 10, 5)
print(theta)  # [ 0.   2.5  5.   7.5 10. ]

3-3. 랜덤 배열 생성

# 50~100 사이 정수 5개 랜덤 생성
scores = np.random.randint(low=50, high=101, size=5)
print("랜덤 점수:", scores)
# 예시 출력: [88 91 66 74 100]

# 표준정규분포(평균 0, 표준편차 1인 분포)로부터 3x3 배열 생성 - 0근처 숫자들이 많고 멀수록 드물다.
randn_arr = np.random.randn(3, 3)
print(randn_arr)


# randint - 정수, randn(rand normal) - 정규 분포: 실수

4. 배열의 속성 확인하기

배열도 클래스의 인스턴스이므로, 다양한 속성(attribute)과 메서드(method)를 갖고 있다.

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

print(arr.shape)   # (2, 3) → 2행 3열
print(arr.dtype)   # int64  → 데이터 타입
print(arr.mean())  # 3.5    → 평균값
print(arr.sum())   # 21     → 합계

5. 배열 수정하기

5-1. 특정 원소 변경

x = np.eye(3)  # 3x3 단위행렬
print(x[0, 2])  # 0.0 → 0행 2열 원소

x[0, 2] = 1    # 값 변경
print(x[0, 2])  # 1.0

5-2. 자료형 변환 (astype)

x = np.eye(3)

x_bool  = x.astype(bool)   # bool 타입으로 변환
x_int   = x.astype(int)    # int 타입으로 변환
x_float = x * 1.1          # float 연산

print(x_bool.dtype)   # bool
print(x_int.dtype)    # int64
print(x_float)

[[1.1 0.  0. ]
 [0.  1.1 0. ]
 [0.  0.  1.1]]

6. 배열 변환하기

6-1. tile - 배열 복제

v = np.array([1, 2, 3])

# v를 3번 반복하여 3x3 행렬 만들기
V = np.tile(v, (3, 1))    #tile(A, repetitions) - nparray, 반복회수(튜플 가능)
print(V)
# [[1 2 3]
#  [1 2 3]
#  [1 2 3]]

6-2. flatten - 1차원으로 펼치기

V_vector = V.flatten()
print(V_vector)
# [1 2 3 1 2 3 1 2 3]
print(V_vector.shape)  # (9,)

7. 행렬 연산

x = np.eye(3)
y = np.random.randn(3, 3)

# 행렬곱 계산
z = np.dot(x, y)
print(z.shape)  # (3, 3)

8. 수학 함수 적용하기

NumPy는 삼각함수, 지수함수 등 다양한 수학 함수를 배열 전체에 한 번에 적용할 수 있다.

import matplotlib.pyplot as plt

# 0부터 2π까지 균등한 간격의 값 100개
theta = np.linspace(0, 2 * np.pi, 100)

# 각 원소에 sin 함수 적용
sin_theta = np.sin(theta)

# 시각화
plt.plot(theta, sin_theta)
plt.title("Sine Curve")
plt.xlabel("θ (radians)")
plt.ylabel("sin(θ)")
plt.show()


9. 자주 쓰는 NumPy 함수 요약

함수 설명 예시
np.array() 배열 생성 np.array([1,2,3])
np.eye(n) n×n 단위행렬 np.eye(3)
np.linspace(a,b,n) a~b 균등 n개 np.linspace(0, 1, 5)
np.random.randint() 정수 랜덤 배열 np.random.randint(0, 10, 5)
np.random.randn() 정규분포 랜덤 배열 np.random.randn(3, 3)
np.dot(a, b) 행렬곱 np.dot(x, y)
np.sin() sin 함수 np.sin(theta)
.shape 배열 크기 확인 arr.shape
.dtype 데이터 타입 확인 arr.dtype
.astype() 데이터 타입 변환 arr.astype(int)
.flatten() 1차원으로 펼치기 arr.flatten()
.mean() 평균 계산 arr.mean()

마무리

NumPy는 파이썬 데이터 분석의 필수 기초 도구다.
처음에는 낯설더라도 직접 코드를 실행하며 익히면 금방 친숙해진다!

다음 단계로는 Pandas(데이터프레임 처리)와 Matplotlib(데이터 시각화)을 학습하면 데이터 분석의 기본 삼각편대가 완성된다. 🚀

'Python' 카테고리의 다른 글

NumPy 축(Axis) 개념 완벽 이해  (0) 2026.03.03
numpy - broadcasting 연산  (0) 2026.03.03
Collection - defaultdict와 Counter  (0) 2026.03.02
jupyterLab  (0) 2026.03.02
Collection - list  (0) 2026.03.02
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.