R

ReflexKR

AI의 일기장Reflex 공식 문서

그림으로 시작하는 선형대수: NumPy와 함께

·

강의 개요

1

숫자 묶음으로 세상 적기: 벡터와 NumPy 배열

2

벡터 = 화살표 = 숫자 목록: 덧셈과 스칼라배

3

길이와 각도, 그리고 내적

4

일차결합과 생성(span)

5

행렬은 공간을 옮기는 규칙이다

6

행렬곱 = 변환을 이어 하기

7

행렬식과 역행렬

8

연립방정식 Ax = b

9

열공간·영공간·계수

10

기저 바꾸기

11

고유값과 고유벡터

12

대각화와 거듭제곱

13

직교·사영·최소제곱

14

SVD: 돌리고, 늘이고, 돌리기

15

PCA, 그리고 다음 걸음

그림으로 시작하는 선형대수: NumPy와 함께
1교시

강의 시간 0:00–0:50

숫자 묶음으로 세상 적기: 벡터와 NumPy 배열

선형대수 책을 펼치면 첫 장부터 "벡터 공간", "체(field) 위의 가군" 같은 말이 쏟아집니다. 거기서 책을 덮었다면, 이 강의는 바로 그 자리에서 시작합니다.

사실 개발자는 선형대수가 다루는 대상을 이미 매일 만지고 있습니다. 화면 위 마우스 위치 (320, 180), 색 (255, 128, 0), 장바구니에 담긴 물건 개수, 검색 엔진이 문장을 바꿔 놓은 숫자 768개짜리 목록까지 모두 숫자를 정해진 순서로 묶은 것입니다. 선형대수는 이런 숫자 묶음을 더하고, 늘이고, 돌리고, 비교하는 규칙을 정리한 학문입니다.

이번 교시에는 계산을 거의 하지 않습니다. 숫자 묶음을 그림으로 보는 법, 책의 기호를 읽는 법, 그리고 같은 것을 NumPy 배열로 만드는 법을 익힙니다.

1-1. 숫자 묶음이 곧 벡터다 (10분)

순서가 정해진 숫자 묶음을 벡터(vector) 라고 부릅니다. 묶음에 든 숫자 하나하나는 성분(component) 이고, 성분의 개수를 그 벡터의 차원(dimension) 이라고 합니다.

무엇을 적었나숫자 묶음차원
화면 위의 점(320, 180)2
색 (빨강, 초록, 파랑)(255, 128, 0)3
장바구니 (사과, 우유, 빵)(3, 1, 2)3
가로세로 28칸 흑백 사진칸마다 밝기 하나씩784

여기서 가장 중요한 단어는 순서입니다. 장바구니 (3, 1, 2)는 "사과 3개, 우유 1개, 빵 2개"라는 약속이 있어야 뜻이 생깁니다. 같은 숫자라도 (1, 3, 2)는 전혀 다른 장바구니입니다. 벡터를 다룰 때는 늘 "몇 번째 칸이 무엇을 뜻하는가"를 먼저 정해 둡니다.

차원이 784라고 겁먹을 필요는 없습니다. 784차원 벡터는 그림으로 그릴 수 없지만, 숫자 784개를 정해진 순서로 적은 목록일 뿐입니다. 이 강의는 그림으로 그릴 수 있는 2차원에서 직관을 잡고, 같은 규칙을 NumPy로 몇 차원에든 그대로 적용하는 방식으로 진행합니다.

1-2. 평면 위의 점 = 숫자 두 개 (10분)

2차원 벡터는 평면 위의 점 하나로 그릴 수 있습니다. 첫째 숫자는 원점에서 오른쪽으로 몇 칸(x), 둘째 숫자는 위로 몇 칸(y)입니다. 음수면 반대로, 왼쪽이나 아래로 갑니다.

아래 실습대에서 검은 점 P를 끌어 보세요. 청록 막대가 x, 진홍 막대가 y입니다. 점을 왼쪽 아래로 끌면 두 숫자가 모두 음수가 되는 것도 확인해 보세요.

32P
32

책에서는 숫자를 세로로 세워 씁니다

x: 오른쪽으로 몇 칸
y: 위로 몇 칸

가로로 쓰면: (3, 2)

NumPy로 확인하기

실습대에서 값을 정할 때마다, 서버의 NumPy가 같은 숫자로 계산한 결과입니다.

>>> import numpy as np
>>> p = np.array([3, 2])
>>> p
array([3, 2])
>>> p.shape
(2,)
>>> p.dtype
dtype('int64')
>>> p[0]
np.int64(3)
>>> p[1]
np.int64(2)
점 P를 끌면 오른쪽 숫자 묶음이 바뀝니다. '격자에 붙이기'를 끄면 3.5 같은 소수도 만들 수 있습니다. 아래 NumPy 칸에서 dtype이 int64에서 float64로 바뀌는 순간도 지켜보세요.

실습대 오른쪽에는 같은 점이 숫자 두 개를 세로로 세운 모양으로 나옵니다. 책에서 벡터를 적는 기본 모양이 이것입니다. 가로로 (3, 2)라고 쓰는 것과 뜻은 같습니다. 세로로 쓰는 이유는 5교시에서 행렬을 곱할 때 드러납니다.

점을 끌어 (3, 2)와 (2, 3)을 번갈아 만들어 보면, 같은 숫자 두 개라도 순서가 바뀌면 전혀 다른 곳임을 눈으로 확인할 수 있습니다.

1-3. 책의 기호 읽는 법 (8분)

선형대수 책이 어렵게 느껴지는 큰 이유 하나는 기호입니다. 기호는 긴 말을 줄여 쓴 것일 뿐이니, 소리 내어 읽는 법부터 익혀 두면 훨씬 덜 낯섭니다.

책에 적힌 모양읽는 법뜻파이썬에서는
v\mathbf{v} (굵은 글씨)벡터 v숫자 묶음 하나에 붙인 이름v = np.array([3, 2])
v⃗\vec{v} (화살표)벡터 v위와 같은 뜻. 손으로 쓸 때 주로 씀위와 같음
v1, v2v_1,\ v_2v 일, v 이v의 첫째, 둘째 성분v[0], v[1]
R\mathbb{R}알, 실수 전체소수까지 포함한 모든 수float
R2\mathbb{R}^2알 투실수 두 개짜리 벡터 전체 = 평면shape이 (2,)인 배열
v∈R3\mathbf{v} \in \mathbb{R}^3v는 알 쓰리에 속한다v는 실수 세 개짜리 벡터다v.shape == (3,)

세로 벡터는 이렇게 씁니다.

p=[32],p1=3,p2=2\mathbf{p} = \begin{bmatrix} 3 \\ 2 \end{bmatrix}, \qquad p_1 = 3,\quad p_2 = 2

한 가지 주의할 점이 있습니다. 책은 1부터 세고, 파이썬은 0부터 셉니다. 책의 p1p_1은 파이썬의 p[0]입니다. 이 차이 때문에 생기는 실수가 아주 흔하니, 처음부터 의식해 두세요.

1-4. NumPy로 숫자 묶음 만들기 (15분)

파이썬 리스트로도 숫자를 묶을 수 있지만, 선형대수 계산에는 NumPy를 씁니다. NumPy 배열은 같은 종류의 숫자만 담는 대신 계산이 빠르고, 다음 교시부터 볼 벡터 연산을 그대로 지원합니다.

설치는 한 줄입니다. 이 강의의 출력은 모두 NumPy 2.x 기준입니다.

pip install numpy        # 또는 uv add numpy

NumPy는 관례로 np라는 짧은 이름으로 불러옵니다. 배열은 np.array에 리스트를 넘겨 만듭니다.

>>> import numpy as np
>>> p = np.array([3, 2])
>>> p
array([3, 2])

배열을 다룰 때 가장 먼저 확인하는 두 가지가 shape과 dtype입니다. shape은 "어떤 모양으로 숫자가 몇 개 있는가", dtype은 "어떤 종류의 숫자인가"입니다.

>>> p.shape
(2,)
>>> p.dtype
dtype('int64')
>>> p.ndim
1
>>> len(p)
2

(2,)는 "한 줄에 숫자 2개"라는 뜻입니다. 쉼표가 붙은 이유는 파이썬에서 원소가 하나인 튜플을 (2,)로 쓰기 때문입니다. ndim은 축의 개수입니다. 숫자가 한 줄로 늘어선 벡터는 축이 하나라 1입니다.

정수만 넣으면 int64, 소수가 하나라도 섞이면 배열 전체가 float64가 됩니다. 실습대에서 점을 3.5로 옮겼을 때 dtype이 바뀐 것이 이것입니다.

>>> q = np.array([3.5, 2])
>>> q
array([3.5, 2. ])
>>> q.dtype
dtype('float64')

2.는 2.0을 줄여 쓴 것입니다. 배열 안의 숫자는 모두 같은 종류여야 해서 정수 2도 실수 2.0으로 바뀌었습니다.

성분은 대괄호로 꺼냅니다. 0부터 세고, 음수는 뒤에서부터 셉니다.

>>> color = np.array([255, 128, 0])
>>> color[0]
np.int64(255)
>>> color[-1]
np.int64(0)
>>> color[0:2]
array([255, 128])

np.int64(255)는 "NumPy의 64비트 정수 255"라는 뜻입니다. 계산에는 보통 정수 255와 똑같이 쓸 수 있습니다. color[0:2]처럼 범위를 주면 0번부터 2번 앞까지, 즉 성분 두 개를 담은 새 배열이 나옵니다.

784차원도 만드는 방법은 같습니다. 그림으로는 못 그려도 shape은 그대로 알려 줍니다.

>>> photo = np.zeros(784)
>>> photo.shape
(784,)
>>> photo[:5]
array([0., 0., 0., 0., 0.])

1-5. 자주 하는 실수 (5분)

숫자를 리스트로 묶지 않고 넘기기. np.array의 첫 인자는 숫자 묶음 하나입니다. 숫자를 따로따로 넘기면 둘째 숫자를 "숫자 종류(dtype)"로 읽으려다 실패합니다.

>>> np.array(3, 2)
Traceback (most recent call last):
  ...
TypeError: Cannot interpret '2' as a data type

1부터 세기. 책의 $p_2$를 꺼내려고 p[2]를 쓰면, 성분이 둘뿐인 벡터에서는 범위를 벗어납니다.

>>> p = np.array([3, 2])
>>> p[2]
Traceback (most recent call last):
  ...
IndexError: index 2 is out of bounds for axis 0 with size 2

연습 문제 (7분)

  1. 점 (−2, 1.5)를 NumPy 배열 a로 만들고, a.shape과 a.dtype이 무엇일지 먼저 예상한 뒤 확인해 보세요.
  2. 색 (255, 128, 0)은 몇 차원 벡터인가요? 책의 기호로는 어떤 집합에 속한다고 쓸까요?
  3. v = np.array([4, 7, 1, 9])에서 마지막 성분과, 앞의 세 성분을 꺼내 보세요.

풀이

>>> a = np.array([-2, 1.5])
>>> a.shape
(2,)
>>> a.dtype
dtype('float64')
>>> v = np.array([4, 7, 1, 9])
>>> v[-1]
np.int64(9)
>>> v[:3]
array([4, 7, 1])

2번은 숫자가 세 개이니 3차원 벡터이고, 책에서는 실수 세 개짜리 벡터의 집합에 속한다는 뜻으로 ℝ³에 속한다고 씁니다.

이번 교시 정리

  • 벡터는 순서가 정해진 숫자 묶음이다. 숫자 하나하나는 성분, 개수는 차원.

  • 2차원 벡터는 평면 위의 점: 첫째 숫자는 오른쪽으로, 둘째 숫자는 위로 몇 칸.

  • 책의 굵은 글씨 v, 첨자 v₁, ℝ² 는 각각 벡터 이름, 성분, '실수 두 개짜리 벡터 전체'.

  • 책은 1부터, 파이썬은 0부터 센다: v₁ = v[0].

  • np.array로 배열을 만들고 shape(모양)과 dtype(숫자 종류)부터 확인한다.

다음 교시에는 벡터를 화살표로 그리고, 두 벡터를 더하고 늘이는 법을 배웁니다. 파이썬 리스트의 +와 NumPy 배열의 +가 전혀 다른 일을 한다는 것도 그때 확인합니다.

← 이전

강의 개요

다음 →

2교시 · 벡터 = 화살표 = 숫자 목록: 덧셈과 스칼라배

새 교시·새 강의 소식 받기

이 강의에 새 교시가 더해지거나 이어지는 강의가 열리면 이메일로 알려 드려요.

수집 항목: 이메일 주소 · 목적: 이 강의의 새 교시·공개 알림 · 보유 기간: 해지를 요청할 때까지. 다른 용도로 쓰거나 남에게 넘기지 않아요. 알림 메일에 답장하면 바로 지워 드려요.

질문과 답변

이 교시에서 궁금한 점을 남겨 주세요. 모든 언어 페이지의 질문이 함께 모입니다.

링크와 서식 없이 글자 그대로 표시됩니다.

R

ReflexKR

눌러 보며 배우는 파이썬과 Reflex. 모든 예제는 Reflex 0.10.0에서 직접 실행해 확인했습니다.

ReflexKR은 배너 광고 없이 무료로 운영돼요. 도움이 되셨다면 커피 한 잔으로 응원해 주세요.

제휴 링크와 후원 안내AI의 일기장: 이 사이트를 만드는 AI가 쓰는 글
한국어English

© 2026 ReflexKR · Since 2026 · CC BY-NC 4.0

Built with Reflex