Numpy & Module

2025. 11. 20. 20:47AI활용 멀티모달&MCP 과정

프레임워크와 라이브러리

프레임워크와 라이브러리는 개발할 때 많이 사용하는 개념입니다.

  • 프레임워크는 건축물의 '틀'과 같습니다. 즉, 개발할 때 큰 구조를 미리 만들어 놓고, 그 틀 안에서 작업을 진행합니다.
  • 라이브러리는 건물을 지을 때 사용하는 '도구 모음'과 같습니다. 필요한 기능을 골라서 사용합니다.

예를 들어, 넘파이(Numpy)는 파이썬에서 수치 계산을 쉽게 할 수 있도록 도와주는 라이브러리입니다.

넘파이(Numpy) 소개 및 설치

넘파이는 파이썬에서 더 빠르고 효율적인 수치 연산을 가능하게 하는 라이브러리로, 특히 AI 분야에서 자주 사용됩니다.

넘파이 설치하기

터미널이나 코랩 같은 OS 환경에서 아래 명령어를 사용해 설치합니다.

!pip install numpy

주의: 코랩에는 이미 설치되어 있어서 설치 메시지가 뜰 수 있습니다.

로컬 환경에서는 직접 설치해야 합니다.

넘파이 불러오기

import numpy as np

이렇게 하면 np라는 별칭으로 넘파이를 사용할 수 있습니다.

참고: ! 명령어

느낌표(!)는 OS 터미널 명령어를 파이썬 환경에서 사용할 때 씁니다.

파이썬 모듈과 코랩 활용

파이썬 모듈은 .py 확장자를 가진 파일로, 함수, 변수, 클래스 등을 담을 수 있습니다. 다른 코드에서 import로 불러와 사용할 수 있습니다.

코랩을 사용하는 이유

  • 인터넷만 연결되어 있으면 어디서든 사용 가능
  • 연구, 분석하기 편리
  • GPU를 무료로 사용할 수 있는 점

파일 종류

파일 확장자 용도 특징
.py Python 파일 텍스트 기반, 전체 스크립트를 한 번에 실행, 외부 창에서 그림 출력, 배포용 코드 작성에 적합
.ipynb IPython Notebook 파일 Jupyter 노트북 형식, 셀 단위 실행, 결과가 파일 내 저장, 그림과 그래프를 바로 보여줌, 문서화 및 교육에 적합

모듈 만들기와 사용

모듈은 주로 .py 파일로 만드는데, 코랩에 업로드 후 import 명령으로 불러 사용할 수 있습니다.

다음 코드를 math_tools파일을 생성하여 작성후 저장합니다.

# 변수
PI = 3.141592653589793

# 함수
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

# 클래스
class Circle:
    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return PI * self.radius * self.radius

 

 

math_tools 파일을 구글 드라이브에 업로드하고 마운트하게 되면 코랩에서 다음과 같이 사용할 수 있습니다.

from math_tools import PI, Circle

print(PI)
circle = Circle(5)
print(circle.area())

별칭을 붙여 간단하게 사용할 수도 있습니다.

import math_tools as mt
print(mt.PI)
 

코랩 단점과 구글 드라이브 활용

코랩 서버는 연결이 끊기면 작업 결과가 사라질 수 있으므로, 중요한 모듈이나 데이터는 구글 드라이브에 저장해 두고 연결할 때마다 불러오는 방식을 추천합니다.

  • 구글 드라이브에 모듈 파일을 업로드
  • 코랩에서 드라이브를 마운트 후 파일 사용

패키지와 모듈 구조

큰 규모의 모듈들을 묶어 관리하기 쉽게 만든 것이 패키지입니다.

my_package/
│
├── __init__.py
├── module_a.py
└── sub_package/
    ├── __init__.py
    └── module_b.py

패키지를 만들 때는 __init__.py 파일이 꼭 필요합니다.

패키지 실습 예

VSCode에서 shapes 폴더를 만들고 그 안에 __init__.py와 여러 .py 파일을 넣습니다.

구글 드라이브에 폴더째 업로드 후 아래와 같이 사용 가능합니다.

from shapes import circle, rectangle

함수 이름 충돌 해결

함수 이름이 area로 같은 경우 다음과 같이 서로 다르게 별칭을 선언해 줍니다.

from shapes.circle import area as circle_area
from shapes.rectangle import area as rectangle_area

마찬가지로 라이브러리 별칭 사용법

import numpy as np

넘파이 다차원 배열 (ndarray)

넘파이의 핵심 데이터 구조는 ndarray로, 동일한 자료형을 가진 다차원 배열입니다.

즉 ndarry는 구성요소가 같은 유형의 변수로 이루어져야 하므로,

각 요소의 변수 유형이 다른 리스트를 ndarray로 변환하게 되면 저장 크기가 가장 큰 유형을 기준으로 데이터 타입이 자동으로 변환됩니다. 

 

ndarr1 = np.array([0,1,2,3,4,5])

리스트와 배열 변환

  • 리스트 → 배열 : np.array()
  • 배열 → 리스트 : tolist() 함수 사용

데이터 타입 지정과 변환

ndarr4 = np.array(['1', 2, 3.14, True], dtype=int)

배열 내 원소를 강제로 지정한 자료형으로 변환합니다. (숫자로 변환 가능한 데이터만 가능)

인덱싱과 슬라이싱

기본 인덱싱

ndarr1 = np.array(['🍓', '🍉', '🍌', '🍒', '🍑'])
print(ndarr1[0])  # 🍓
print(ndarr1[-1]) # 🍑

슬라이싱

print(ndarr1[0:3])  # ['🍓' '🍉' '🍌']
print(ndarr1[2:])   # ['🍌' '🍒' '🍑']

2차원 배열 인덱싱

ndarr2d = np.array([[1, 2, 3, 4],
                      [5, 6, 7, 8],
                      [9, 10, 11, 12]])
print(ndarr2d[0, :])  # 0행 전체
print(ndarr2d[:, 0])  # 0열 전체

불린 인덱싱

sel = [True, False, True, True, False]
print(ndarr1[sel])  # True인 위치 원소만 출력

불린 인덱싱을 사용할 때는 배열과 조건 리스트의 길이가 같아야 합니다.

행렬 연산과 행렬곱

선형대수는 벡터와 행렬을 이용해 데이터를 표현하고 변환하는 수학 분야입니다.

기본 행렬 연산

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

print(a + b)  # 덧셈
print(a - b)  # 뺄셈
print(a * b)  # 원소별 곱셈
print(a / b)  # 원소별 나눗셈

행렬곱(Matrix Multiplication)

행렬곱은 두 행렬을 곱해 새로운 행렬을 만드는 연산입니다.

  • 첫 행렬의 열 개수와 두 번째 행렬의 행 개수가 같아야 합니다.
  • 결과 행렬은 첫 행렬의 행 개수 × 두 번째 행렬의 열 개수입니다.
  • 행렬곱은 첫 행렬의 각 행과 두 번째 행렬의 각 열의 원소별 곱을 모두 더해서 계산합니다.
ndarr3 = np.array([[1, 2, 3],
                    [1, 2, 3],
                    [2, 3, 4]])
ndarr4 = np.array([[1, 2],
                   [3, 4],
                   [5, 6]])

print(ndarr3.shape)  # (3, 3)
print(ndarr4.shape)  # (3, 2)

print(ndarr3 @ ndarr4)       # 행렬곱 연산
print(np.dot(ndarr3, ndarr4)) # 같은 결과

계산 예시

예: 첫 행렬의 첫 행과 두 번째 행렬의 첫 열 곱하기 및 합산

(1*1 + 2*3 + 3*5), (1*2 + 2*4 + 3*6)

전체 요약

  • 프레임워크는 큰 틀, 라이브러리는 도구 모음입니다.
  • 넘파이는 파이썬에서 빠르고 효율적인 수치 연산을 위한 라이브러리입니다.
  • 파이썬 .py 파일은 모듈로 사용하며, 코랩 등에서 불러올 수 있습니다.
  • 큰 규모 모듈은 패키지로 묶으며, __init__.py 파일이 필요합니다.
  • 넘파이의 핵심 데이터 구조인 ndarray는 동일 자료형 다차원 배열입니다.
  • 인덱싱, 슬라이싱, 불린 인덱싱을 통해 배열의 원하는 부분을 쉽게 다룰 수 있습니다.
  • 행렬 연산은 벡터와 행렬을 이용한 데이터 조작의 기본이며, 행렬곱은 두 행렬의 특정 규칙에 따라 곱합니다.

작성일: 2025년 11월 20일