REMI Lab
OPEN KNOWLEDGE / COURSES

10주차 · NumPy를 위한 행렬과 벡터 기초

이 페이지의 내용

학습 목표

이번 주는 코딩 실습보다 수학적 배경 이해가 목표입니다. 이 장을 마치면 다음을 설명할 수 있어야 합니다.

  • 점, 벡터, 행렬을 구분한다.
  • 벡터 덧셈을 성분별 계산과 화살표 그림으로 설명한다.
  • 스칼라배가 벡터의 길이와 방향을 어떻게 바꾸는지 설명한다.
  • 행렬을 행(row), 열(column), 원소, 크기(m × n)로 읽는다.
  • 행렬 덧셈과 스칼라배가 같은 위치의 칸끼리 계산되는 이유를 설명한다.
  • 행렬-벡터 곱을 “행마다 하나의 가중합을 만드는 계산”으로 설명한다.
  • 행렬-행렬 곱이 가능한 조건과 결과 크기를 판단한다.
  • NumPy에서 shape, axis, *, @를 배울 때 어떤 수학 개념과 연결되는지 말한다.

왜 NumPy 전에 행렬과 벡터를 배우나요?

Python 리스트에 숫자를 넣는 것만으로도 간단한 계산은 할 수 있습니다. 하지만 공학 데이터는 금방 다음처럼 커집니다.

데이터 상황수학적으로 보는 모양NumPy에서 만날 모양
전압값 하나스칼라3.3
전압을 5번 측정벡터shape == (5,)
3개 센서를 4번 측정행렬shape == (4, 3)
이미지 한 장여러 축을 가진 배열height × width × color

즉, NumPy는 단순히 “빠른 리스트”가 아닙니다. 벡터와 행렬의 계산 규칙을 코드로 옮긴 도구입니다.


0. 기본 용어 정리

처음 보는 용어가 많다면, 이번 주에는 아래 뜻으로 먼저 정리하세요.

용어쉬운 설명예
스칼라(scalar)숫자 하나3, -1.5, 0.2
벡터(vector)숫자 성분을 가진 화살표 또는 이동량[2, 3]
성분(component)벡터 안의 각 숫자[2, 3]의 2, 3
행렬(matrix)행과 열을 가진 숫자표[[1, 2], [3, 4]]
행(row)가로줄첫 번째 행 [1, 2]
열(column)세로줄첫 번째 열 [1, 3]
원소행렬의 한 칸1행 2열의 값 2
shape데이터의 모양(2, 3)
axis어느 방향으로 모을지 나타내는 축axis=0, axis=1

1. 점과 벡터: 같은 숫자쌍도 다르게 읽을 수 있습니다

좌표평면에서 (2, 3)은 보통 점의 위치를 뜻합니다. 하지만 벡터로 읽으면 뜻이 조금 달라집니다.

표현읽는 법
점 (2, 3)x=2, y=3인 위치
벡터 [2, 3]오른쪽으로 2, 위로 3 이동하는 화살표

벡터를 성분으로 읽기

v = [2, 3]
첫 번째 성분 2 → x 방향으로 2칸
두 번째 성분 3 → y 방향으로 3칸

벡터를 처음 배울 때는 “화살표”와 “숫자 묶음”을 번갈아 떠올리세요.

  • 그림으로 보면: 이동 화살표
  • 계산으로 보면: 같은 위치 성분끼리 계산하는 숫자 묶음

2. 벡터 덧셈: 두 번 움직이면 한 번의 움직임이 됩니다

두 벡터를 더한다는 것은 두 이동을 이어 붙인다는 뜻입니다.

u = [2, 1]
v = [1, 3]
u + v = [2 + 1, 1 + 3]
= [3, 4]

성분별로 보면 x 방향 이동량끼리 더하고, y 방향 이동량끼리 더합니다.

인터랙티브 · 벡터 덧셈: 꼬리와 머리를 이어 보기 값을 바꾸며 계산 규칙을 눈으로 확인하세요.

읽기 체크

  • u = [2, 1]은 오른쪽으로 몇 칸, 위로 몇 칸 움직이나요?
  • v = [1, 3]을 u의 끝에 붙이면 마지막 도착점은 어디인가요?
  • u + v와 v + u의 결과 성분은 같은가요?

3. 스칼라배: 같은 방향으로 늘리거나 반대로 뒤집기

벡터 덧셈이 “이동을 이어 붙이는 계산”이었다면, 스칼라배는 “같은 이동을 몇 배로 키우거나 줄이는 계산”입니다.

스칼라는 방향이 없는 숫자입니다. 벡터에 스칼라를 곱하면 각 성분에 같은 숫자를 곱합니다.

v = [2, 1]
2v = [4, 2]
0.5v = [1, 0.5]
-v = [-2, -1]
스칼라 k벡터 kv의 변화
k > 1같은 방향으로 길어짐
0 < k < 1같은 방향으로 짧아짐
k = 0[0, 0]이 됨
k < 0반대 방향으로 뒤집힘
인터랙티브 · 스칼라배로 길이와 방향 바꾸기 값을 바꾸며 계산 규칙을 눈으로 확인하세요.

읽기 체크

  • 3[1, 2]의 결과는 무엇인가요?
  • -1[1, 2]는 원래 벡터와 같은 방향인가요, 반대 방향인가요?
  • 0[1, 2]는 어떤 벡터가 되나요?

4. 가중합과 내적: 같은 위치끼리 곱해 모두 더하기

이제 “성분별로 더하기”에서 한 단계 더 나아가, 성분마다 다른 중요도를 주는 계산을 보겠습니다.

행렬-벡터 곱을 배우기 전에 **가중합(weighted sum)**을 먼저 봅니다. 가중합은 “각 값에 중요도 또는 계수를 곱한 뒤 더하는 계산”입니다.

예를 들어 최종 점수를 이렇게 계산한다고 합시다.

최종점수 = 0.4 × 과제점수 + 0.6 × 시험점수

과제점수가 80점, 시험점수가 90점이면 다음과 같습니다.

0.4 × 80 + 0.6 × 90 = 32 + 54 = 86

벡터로 쓰면 이렇게 볼 수 있습니다.

가중치 w = [0.4, 0.6]
점수 x = [80, 90]
w · x = 0.4×80 + 0.6×90 = 86

여기서 ·는 내적(dot product) 기호입니다. 두 벡터의 성분 개수가 같을 때, 같은 위치끼리 곱한 뒤 모두 더하는 계산으로 이해하면 됩니다.


5. 행렬: 숫자가 들어 있는 직사각형 표

행렬은 행과 열을 가진 숫자표입니다.

A = [ 1 2 3 ]
[ 4 5 6 ]

이 행렬은 가로줄이 2개, 세로줄이 3개이므로 2 × 3 행렬입니다.

항목의미위 행렬에서 예
행(row)가로줄1행: [1, 2, 3]
열(column)세로줄2열: [2, 5]
원소행렬의 한 칸2행 3열의 값: 6
크기행 개수 × 열 개수2 × 3
인터랙티브 · 행렬의 행, 열, shape 읽기 값을 바꾸며 계산 규칙을 눈으로 확인하세요.

수학 인덱스와 NumPy 인덱스

수학 교과서에서는 보통 첫 번째 행, 첫 번째 열을 a11처럼 1부터 셉니다. NumPy는 Python 규칙을 따르므로 0부터 셉니다.

사람이 읽는 위치수학식 표현NumPy 표현
1행 1열a11A[0, 0]
1행 2열a12A[0, 1]
2행 3열a23A[1, 2]

6. 행렬 덧셈과 스칼라배: 같은 위치끼리 계산합니다

행렬 덧셈은 두 행렬의 같은 위치에 있는 값을 더합니다.

[ 1 2 ] + [ 10 20 ] = [ 11 22 ]
[ 3 4 ] [ 30 40 ] [ 33 44 ]

중요한 조건이 있습니다. 두 행렬의 크기가 같아야 합니다.

  • 2 × 2와 2 × 2는 더할 수 있습니다.
  • 2 × 3과 3 × 2는 더할 수 없습니다.
인터랙티브 · 행렬 덧셈 칸별 하이라이트 값을 바꾸며 계산 규칙을 눈으로 확인하세요.

행렬 덧셈은 같은 위치의 칸끼리 더합니다. 두 행렬의 모양이 다르면 덧셈은 정의되지 않습니다.

스칼라배도 비슷합니다. 행렬의 모든 칸에 같은 숫자를 곱합니다.

3 [ 1 2 ] = [ 3 6 ]
[ 3 4 ] [ 9 12 ]

읽기 체크

  • 2 × 3 행렬과 2 × 3 행렬은 더할 수 있나요?
  • 2 × 3 행렬과 3 × 2 행렬은 더할 수 있나요?
  • 행렬에 3을 곱하면 몇 개의 칸이 바뀌나요?

7. 행렬-벡터 곱: 여러 개의 가중합을 한 번에 계산합니다

앞에서 배운 내적을 행렬의 여러 행에 반복해서 적용하면 행렬-벡터 곱이 됩니다.

다음 행렬과 벡터를 봅시다.

A = [ 1 2 ] x = [ 10 ]
[ 3 4 ] [ 20 ]
[ 5 6 ]

A는 3 × 2 행렬이고, x는 2 × 1 벡터입니다. 앞 행렬의 열 수 2와 뒤 벡터의 행 수 2가 같으므로 곱할 수 있습니다.

Ax = [ 1×10 + 2×20 ] [ 50 ]
[ 3×10 + 4×20 ] = [ 110 ]
[ 5×10 + 6×20 ] [ 170 ]
인터랙티브 · 행렬-벡터 곱 한 행씩 계산하기 값을 바꾸며 계산 규칙을 눈으로 확인하세요.

행렬-벡터 곱은 행렬의 각 행이 벡터와 만나 결과 숫자 하나씩을 만드는 계산입니다.

조금 더 깊게 보기: 열을 섞어서 결과 만들기

처음에는 “행마다 가중합” 관점만 확실히 잡아도 됩니다. 다음 관점은 행렬곱이 왜 벡터를 바꾸는 계산인지 이해할 때 도움이 됩니다.

행렬-벡터 곱은 두 가지 방식으로 볼 수 있습니다.

관점읽는 법초심자에게 좋은 이유
행마다 내적 계산각 행이 벡터와 만나 결과 하나를 만듦계산 절차가 분명함
열벡터의 선형결합벡터 성분만큼 행렬의 열들을 섞음변환 관점으로 연결됨

열벡터의 선형결합으로 보면 위 계산은 다음과 같습니다.

Ax = 10 [ 1 ] + 20 [ 2 ]
[ 3 ] [ 4 ]
[ 5 ] [ 6 ]

8. 행렬-행렬 곱: 행과 열이 만납니다

행렬-행렬 곱은 행렬 덧셈보다 조건이 더 까다롭습니다.

(m × n) @ (n × p) = (m × p)

핵심은 안쪽 크기입니다.

A: 2 × 3
B: 3 × 4
A @ B 가능 → 결과는 2 × 4

하지만 다음은 불가능합니다.

A: 2 × 3
B: 2 × 4
A @ B 불가능 → 안쪽 크기 3과 2가 다름
인터랙티브 · 행렬 크기와 계산 가능 여부 값을 바꾸며 계산 규칙을 눈으로 확인하세요.

결과의 한 칸은 어떻게 만들어지나요?

결과 행렬의 한 칸은 다음 두 줄이 만나서 만들어집니다.

  1. 앞 행렬의 한 행
  2. 뒤 행렬의 한 열
결과의 (i, j) 칸 = A의 i번째 행 · B의 j번째 열

예를 들어 A가 2 × 3, B가 3 × 2이면 결과는 2 × 2입니다.

A = [ 1 2 3 ] B = [ 10 20 ]
[ 4 5 6 ] [ 30 40 ]
[ 50 60 ]
AB의 1행 1열 = 1×10 + 2×30 + 3×50 = 220
AB의 1행 2열 = 1×20 + 2×40 + 3×60 = 280
AB의 2행 1열 = 4×10 + 5×30 + 6×50 = 490
AB의 2행 2열 = 4×20 + 5×40 + 6×60 = 640
인터랙티브 · 행렬-행렬 곱 한 칸씩 계산하기 값을 바꾸며 계산 규칙을 눈으로 확인하세요.

결과의 한 칸은 앞 행렬의 한 행과 뒤 행렬의 한 열을 같은 위치끼리 곱해 더한 값, 즉 내적입니다.

읽기 체크

  • 2 × 3 행렬과 3 × 2 행렬의 곱은 왜 가능한가요?
  • 결과 행렬은 몇 행 몇 열인가요?
  • 결과의 1행 2열 칸은 앞 행렬의 어느 줄과 뒤 행렬의 어느 줄이 만나 만들어지나요?

9. 행렬을 변환으로 보기: 격자가 움직입니다

행렬은 숫자표로만 볼 수도 있지만, 벡터를 움직이는 규칙으로 볼 수도 있습니다.

예를 들어 다음 행렬을 생각해 봅시다.

A = [ 2 0 ]
[ 0 1 ]

이 행렬은 x 방향은 2배로 늘리고, y 방향은 그대로 둡니다.

인터랙티브 · 2×2 행렬로 좌표 격자 변환하기 값을 바꾸며 계산 규칙을 눈으로 확인하세요.
기본 격자에서 시작합니다.

행렬의 첫 번째 열은 기본 x 화살표가 도착하는 곳, 두 번째 열은 기본 y 화살표가 도착하는 곳으로 볼 수 있습니다.

기본 화살표 관점

좌표평면의 기본 화살표 두 개를 생각해 봅시다. 선형대수학에서는 이런 기본 화살표를 기저벡터라고도 부릅니다.

i = [1, 0] x 방향 기본 화살표
j = [0, 1] y 방향 기본 화살표

2×2 행렬의 두 열은 이 기본 화살표들이 어디로 이동하는지를 나타낸다고 볼 수 있습니다.

A = [ a b ]
[ c d ]
첫 번째 열 [a, c] → i가 도착하는 곳
두 번째 열 [b, d] → j가 도착하는 곳

이 관점은 11주차 이후 A @ x를 단순 공식이 아니라 “벡터를 다른 위치로 보내는 계산”으로 이해하는 데 도움이 됩니다.


10. NumPy로 연결하기

다음 주에는 위 개념을 NumPy 코드로 실행합니다.

이번 주 수학 표현11주차 NumPy 표현주의할 점
벡터1차원 배열 또는 2차원 열벡터 모양(3,)와 (3, 1)은 다름
행렬2차원 배열shape가 행과 열을 알려 줌
행렬 크기 m × narr.shape == (m, n)계산 전 먼저 확인
행렬 덧셈A + B보통 같은 shape 필요
원소별 곱A * B행렬곱이 아님
행렬곱A @ B, A @ x안쪽 크기 확인
행/열 방향 계산axis=0, axis=1어느 방향으로 모으는지 이해 필요

읽기 체크 모음

이번 주는 제출 실습 대신 아래 질문으로 이해도를 점검합니다.

  1. 점 (2, 3)과 벡터 [2, 3]은 어떻게 다른가요?
  2. [2, 1] + [1, 3]의 결과를 성분별 계산과 화살표 그림으로 설명해 보세요.
  3. -2[1, 2]는 원래 벡터와 방향이 어떻게 달라지나요?
  4. 2 × 3 행렬에서 행과 열은 각각 몇 개인가요?
  5. 두 행렬을 더하려면 어떤 조건이 필요한가요?
  6. 3 × 2 행렬과 2 × 1 벡터를 곱하면 결과 크기는 무엇인가요?
  7. 2 × 3 행렬과 3 × 4 행렬의 곱은 가능한가요? 결과 크기는 무엇인가요?
  8. NumPy에서 A * B와 A @ B는 어떻게 다른가요?

다음 주 예고

11주차에서는 오늘 배운 벡터와 행렬을 NumPy 배열로 옮깁니다.

import numpy as np
A = np.array([[1, 2],
[3, 4],
[5, 6]])
x = np.array([10, 20])
print(A.shape) # (3, 2)
print(A @ x) # [ 50 110 170]

다음 주의 핵심은 세 가지입니다.

  1. 계산 전 shape를 확인한다.
  2. 원소별 연산과 행렬곱을 구분한다.
  3. axis가 어느 방향으로 값을 모으는지 이해한다.

참고한 공개 강의자료

Back to top ↑