HSEOM GeckoHSEOM
Instagram

흑섬 TECH 블로그 - 데이터 기반 브리딩 기술

레오파드게코 브리딩에 데이터 분석과 AI 기술을 접목합니다. Python, NumPy를 활용한 체중 관리, 성장 추이 분석, 환경 데이터 시각화 등 실무에서 직접 사용하는 기술을 일반인도 이해하기 쉽게 설명합니다.

주요 카테고리

AI 카테고리

AI와 머신러닝을 활용한 레오파드게코 브리딩 기술과 데이터 분석 방법을 공유합니다.

28개의 글이 있습니다.

[벡터#3 방정식] numpy.linalg.solve()로 빠르게 풀기

사과 2개 + 바나나 3개 = 8,000원? 손으로 풀면 5분, Python으로는 빠르게! 연립방정식을 코드 3줄로 해결하는 방법을 배웁니다.

카테고리: AI

작성일: 2026-02-03

예상 읽기 시간: 15

Back to Tech
AI·15min read·

[벡터#3 방정식] numpy.linalg.solve()로 빠르게 풀기

사과 2개 + 바나나 3개 = 8,000원? 손으로 풀면 5분, Python으로는 빠르게! 연립방정식을 코드 3줄로 해결하는 방법을 배웁니다.

워밍업: 이런 적 있으시죠?

편의점에서 사과 2개랑 바나나 3개 사니까 8,000원이었어요. 다음 날 사과 4개랑 바나나 1개 사니까 6,000원이었고요.

"어? 그럼 사과 1개, 바나나 1개는 각각 얼마지?" 궁금하신 적 있으시죠? 이게 연립방정식이에요.


선형 방정식 풀기 - 손계산은 이제 그만!

사과 2개, 바나나 3개 사면 8,000원. 사과 4개, 바나나 1개 사면 6,000원. 각각 얼마일까요?

중학교 때 배운 연립방정식 기억나시나요? 손으로 풀면 5분 걸리고, 계산 실수도 자주 나죠. 하지만 Python numpy.linalg.solve()로는 빠르게 정확한 답이 나옵니다.

왜 이걸 배워야 할까?

일상에서 이런 상황을 겪어본 적 있나요?

  • 가격 역산: 묶음 상품 가격에서 개별 가격 알아내기
  • 재무 계획: 저축, 투자, 지출 목표 달성을 위한 월별 금액 계산
  • 자원 배분: 제한된 예산으로 최적의 물품 구매 계획
  • 레시피 변환: 4인분 레시피를 7인분으로 변환할 때 재료량 계산

이런 문제들은 모두 선형 방정식으로 해결할 수 있어요. 그리고 Python은 이걸 1줄로 풀어냅니다!

연립방정식 예제

1. 선형 방정식이 뭔가요?

일상 속의 방정식

마트에서 이런 상황을 겪었다고 해봐요:

상황 1: 사과 2개 + 바나나 3개 = 8,000원
상황 2: 사과 4개 + 바나나 1개 = 6,000원

Q. 사과 1개, 바나나 1개는 각각 얼마?

손으로 풀면 이렇게 하죠:

2x + 3y = 8,000  ... ①
4x + 1y = 6,000  ... ②

① × 2: 4x + 6y = 16,000
②에서 빼기: 5y = 10,000
∴ y = 2,000원 (바나나)

②에 대입: 4x + 2,000 = 6,000
∴ x = 1,000원 (사과)

→ 5분 소요

Python으로는?

import numpy as np

# 계수 행렬
A = np.array([
    [2, 3],
    [4, 1]
])

# 상수 벡터
b = np.array([8000, 6000])

# 해 구하기
solution = np.linalg.solve(A, b)
print(f"사과: {solution[0]:.0f}원, 바나나: {solution[1]:.0f}원")

→ 완료!
numpy.linalg.solve 실행 결과

2. 계수 행렬과 상수 벡터

방정식을 컴퓨터가 이해할 수 있는 형태로 바꿔야 해요.

원래 방정식:

2x + 3y = 8,000
4x + 1y = 6,000

행렬로 표현:

계수 행렬 A (좌변의 계수들)

┌       ┐
│ 2  3 │  ← 첫 번째 방정식의 계수
│ 4  1 │  ← 두 번째 방정식의 계수
└       ┘

상수 벡터 b (우변의 상수들)

┌      ┐
│ 8000 │  ← 첫 번째 방정식의 우변
│ 6000 │  ← 두 번째 방정식의 우변
└      ┘

NumPy 코드로 표현:

import numpy as np

# 계수 행렬 A
A = np.array([
    [2, 3],  # 2x + 3y
    [4, 1]   # 4x + 1y
])

# 상수 벡터 b
b = np.array([8000, 6000])

print("계수 행렬 A:")
print(A)
print("
상수 벡터 b:")
print(b)
행렬 표현

3. numpy.linalg.solve() 강력한 함수

이제 핵심을 배워볼게요!

단 1줄로 연립방정식 해결:

import numpy as np

# 연립방정식:
# 2x + 3y = 8,000
# 4x + 1y = 6,000

# 계수 행렬 A
A = np.array([
    [2, 3],
    [4, 1]
])

# 상수 벡터 b
b = np.array([8000, 6000])

# 해 구하기 (이 1줄이 핵심!)
solution = np.linalg.solve(A, b)

print(f"x (사과) = {solution[0]:.0f}원")
print(f"y (바나나) = {solution[1]:.0f}원")

# 출력:
# x (사과) = 1000원
# y (바나나) = 2000원

검증하기:

# 정말 맞는지 확인해볼까요?
verification = np.dot(A, solution)
print(f"
검증: A @ solution = {verification}")
print(f"원래 b = {b}")
print(f"일치 여부: {np.allclose(verification, b)}")

# 출력:
# 검증: A @ solution = [8000. 6000.]
# 원래 b = [8000 6000]
# 일치 여부: True
solve 결과 검증

4. 실전 예제: 3x3 연립방정식

2개 미지수는 쉬웠죠? 3개도 똑같아요!

문제:

과일 가격 계산 문제
- 사과 1개 + 바나나 2개 + 오렌지 1개 = 7,000원
- 사과 2개 + 바나나 1개 + 오렌지 2개 = 9,000원
- 사과 1개 + 바나나 1개 + 오렌지 1개 = 5,000원

Q. 각 과일은 얼마?

손으로 풀면: 10분+ 소요
Python으로: 빠르게 완료!

import numpy as np

# 연립방정식:
# 1x + 2y + 1z = 7,000
# 2x + 1y + 2z = 9,000
# 1x + 1y + 1z = 5,000

# 계수 행렬 (3x3)
A = np.array([
    [1, 2, 1],  # 사과 1 + 바나나 2 + 오렌지 1
    [2, 1, 2],  # 사과 2 + 바나나 1 + 오렌지 2
    [1, 1, 1]   # 사과 1 + 바나나 1 + 오렌지 1
])

# 상수 벡터
b = np.array([7000, 9000, 5000])

# 해 구하기
solution = np.linalg.solve(A, b)

print("과일 가격:")
print(f"  사과: {solution[0]:.0f}원")
print(f"  바나나: {solution[1]:.0f}원")
print(f"  오렌지: {solution[2]:.0f}원")

# 검증
verification = np.dot(A, solution)
print(f"
검증: {np.allclose(verification, b)}")

실행 결과:

과일 가격:
  사과: 2000원
  바나나: 1000원
  오렌지: 2000원

검증: True
3x3 방정식 풀이

5. 실무 활용 예제

예제 1: 가계부 최적화

상황: 월 300만원 수입으로 저축, 투자, 생활비를 배분하고 싶어요.

조건:
- 저축 + 투자 + 생활비 = 300만원
- 투자는 저축의 2배
- 생활비는 투자의 1.5배

Q. 각각 얼마씩 배분해야 할까?
import numpy as np

# 연립방정식:
# x + y + z = 300  (총합)
# y = 2x           → -2x + y = 0
# z = 1.5y         → -1.5y + z = 0

A = np.array([
    [1, 1, 1],     # 저축 + 투자 + 생활비 = 300
    [-2, 1, 0],    # 투자 = 저축 × 2
    [0, -1.5, 1]   # 생활비 = 투자 × 1.5
])

b = np.array([300, 0, 0])

solution = np.linalg.solve(A, b)

print("최적 배분:")
print(f"  저축: {solution[0]:.1f}만원")
print(f"  투자: {solution[1]:.1f}만원")
print(f"  생활비: {solution[2]:.1f}만원")

실행 결과:

최적 배분:
  저축: 60.0만원
  투자: 120.0만원
  생활비: 120.0만원

예제 2: 레시피 변환

상황: 4인분 레시피를 7인분으로 변환하고 싶어요.

import numpy as np

# 원래 레시피 (4인분)
# 밀가루 2컵 + 계란 3개 + 우유 1컵 = 4인분
# 밀가루 4컵 + 계란 1개 + 우유 2컵 = 4인분

# 7인분 만들려면?
A = np.array([
    [2, 3, 1],
    [4, 1, 2]
])

b = np.array([7, 7])  # 7인분

# 이 경우는 방정식 수 < 미지수이므로
# 최소제곱법 사용
solution = np.linalg.lstsq(A, b, rcond=None)[0]

print("7인분 레시피:")
print(f"  밀가루: {solution[0]:.1f}컵")
print(f"  계란: {solution[1]:.1f}개")
print(f"  우유: {solution[2]:.1f}컵")
실무 활용 예제

6. 이제 할 수 있어요!

이 글을 읽고 나면 이런 걸 할 수 있어요:

1. 빠른 문제 해결

  • 손으로 5분 걸리던 계산을 빠르게 단축
  • 계산 실수 걱정 없이 정확한 답
  • 3개 이상 미지수도 쉽게 해결

2. 실무 활용

  • 가격 역산, 재무 계획, 자원 배분
  • 레시피 변환, 재료량 계산
  • 복잡한 비즈니스 문제 해결

3. 데이터 분석 기초

  • 선형 회귀 분석의 기초 원리 이해
  • 머신러닝 알고리즘의 수학적 배경
  • 최적화 문제 해결 능력

흔한 실수와 해결법

실수 1: 해가 없는 경우

# ❌ 해가 없는 방정식
# x + y = 10
# x + y = 20  (위 식과 모순!)

A = np.array([[1, 1], [1, 1]])
b = np.array([10, 20])

try:
    solution = np.linalg.solve(A, b)
except np.linalg.LinAlgError:
    print("해가 없거나 무수히 많습니다!")

실수 2: 행렬 크기 불일치

# ❌ 잘못된 예
A = np.array([[1, 2], [3, 4]])  # 2x2 행렬
b = np.array([5, 6, 7])         # 3개 원소 (오류!)

# ✅ 올바른 예
A = np.array([[1, 2], [3, 4]])  # 2x2 행렬
b = np.array([5, 6])            # 2개 원소 (정상!)

정리하며

선형 방정식은 중학교 때 배웠지만, Python을 알면 진짜 강력한 도구가 됩니다.

이 글에서 배운 것:

  1. 선형 방정식 기초
    • 일상 속 문제를 방정식으로 표현하기
    • 계수 행렬과 상수 벡터 이해
  2. numpy.linalg.solve() 활용
    • 단 1줄로 연립방정식 해결
    • 2x2부터 3x3 이상까지 확장
  3. 실무 활용
    • 가계부, 레시피, 가격 계산 등
    • 복잡한 문제도 간단하게 해결

다음 시리즈 예고:

다음 글에서는 정규표현식으로 데이터 추출하기를 배워요. 100페이지 문서에서 이메일 주소를 1초 만에 찾아내는 방법, 궁금하지 않으세요?


연습 과제:

  1. 자신만의 가계부 최적화 방정식 만들어보기
  2. 4x4 연립방정식 풀어보기
  3. 해가 없는 경우와 무수히 많은 경우 실험해보기

연립방정식, 이제 손으로 풀지 마세요. Python이 대신 해드립니다!

#선형방정식#numpy#linalg#연립방정식#데이터분석#벡터수학시리즈