[chapter 1] 벡터, 파트1 : 벡터와 벡터의 기본 연산
1. 덧셈/뺄셈
덧셈도 서로 대응되는 원소끼리 더한다.
이 때, 동일한 차원을 갖는 벡터끼리만 가능하다.(3차원 벡터와 5차원 벡터를 더할 수 없다.)
$$ \begin{bmatrix}
4 \\
5\\
6
\end{bmatrix}+\begin{bmatrix}
10 \\
20 \\
30
\end{bmatrix}=\begin{bmatrix}
14 \\
25 \\
36
\end{bmatrix}$$
뺄셈도 두 벡터를 원소별로 뺀다.
$$ \begin{bmatrix}
4 \\
5\\
6
\end{bmatrix}-\begin{bmatrix}
10 \\
20 \\
30
\end{bmatrix}=\begin{bmatrix}
-4 \\
-15 \\
-24
\end{bmatrix}$$
파이썬에서는 아래와 같이 더할수 있다.
import numpy as np
v = np.array([4,5,6])
w = np.array([10,20,30])
u = np.array([0,3,6,9])
vPlusW = v + w
print(f'vPlusW:{vPlusW}') # vPlusW:[14 25 36]
uPlusW = u + w # ValueError: operands could not be broadcast together with shapes (4,) (3,)
방향이 다른 벡터를 더하면 아래와 같이 된다.
v = np.array([[4,5,6]]) # 행벡터
w = np.array([[10, 20, 30]]).T #열벡터
v+w
# array([[14, 15, 16],
# [24, 25, 26],
# [34, 35, 36]])
이렇게 되는 이유는 '브로드캐스팅(broadcasting)' 연산이 있기 때문이다.(뒤에서 나올 예정이라고 함)
🤔 궁금했던 점
분명 앞에서 3차원 행벡터는 np.array([ [4,5,6] ]) 로 만든다고 했던 것 같은데, 갑자기 위 예시에서는 np.array([4, 5, 6])을 더하고 있어서 뭐지? 싶었다.
결론은 프로그래밍에서의 '차원'과 수학에서의 '차원'이 같은 단어이지만 다른 의미로 쓰이고 있기 때문이다.
- 수학에서의 '차원'
- 성분의 개수
- 성분이 3개면 = 3차원 벡터
- NumPy에서의 '차원'
- 배열의 중첩 구조(depth)
- np.array([4,5,6]) 는 1차원 배열 = (3,)
- np.array([[4,5,6]]) 는 2차원 배열 = (3,1)
파이썬(NumPy)에는 '벡터'라는 자료형은 없지만, np.array([1,2,3])처럼 생긴 1차원 배열을 벡터의 의미로 사용하는 것
즉, 배열을 벡터의 의미로 해석해 계산하는 것이다.
2. 스칼라-벡터 곱셈
선형대수학에서 스칼라(scalar)는 벡터나 행렬에 포함된 숫자가 아닌 수 그 자체
일반적으로 $\alpha$ 또는 $\lambda$와 같은 그리스어 소문자로 나타낸다.
스칼라-벡터 곱셈은 각 벡터 원소에 스칼라를 곱하는 것이다.
$$\lambda = 4, w = \begin{bmatrix}
9 \\
4 \\
1
\end{bmatrix}, \lambda w = \begin{bmatrix}
36 \\
16 \\
4
\end{bmatrix}$$
파이썬으로는 아래와 같이 계산할 수 있다.
s = 2
a = [3, 4, 5] # 리스트
b = np.array(a) # np 배열
print(a*s) # [3, 4, 5, 3, 4, 5]
print(b*s) # [ 6 8 10 ]
위 코드에서 a*s는 일반 리스트 반복이 되었고, b*s는 스칼라-벡터 곱셈이 되었다.
3. 스칼라-벡터 덧셈
벡터에 스칼라를 더하는 것은 선형대수학에서는 불가능하지만, 파이썬에서는 벡터에 스칼라를 더할 수 있다.
이는 스칼라-벡터 곱셈과 유사하게 각 벡터 원소에 스칼라를 더하는 것이다.
s = 2
v = np.array([3,6])
print(s+v) # [5 8]
스칼라-벡터 곱셈은 기하학적으로 아래 그림처럼 이해할 수 있다.

스칼라는 벡터의 방향을 바꾸지 않고 크기만 조정한다.
4. 전치(transpose)
전치 연산은 열벡터를 행벡터로 또는 반대로 변환한다.
$$ m_{i,j}^{T}=m_{j,i} $$
- 행렬에는 행과 열이 있으므로 각 행렬 원소는 (행, 열) 인덱스를 가진다.
- 전치연산은 단순히 이러한 인덱스를 맞바꾸는 것이다.
- 벡터를 두 번 전치하면 원래 방향이 된다. ($v^{TT}=v$)
5. 파이썬에서 벡터 브로드캐스팅
브로드캐스팅 행렬 연산은 현대 컴퓨터 기반 선형대수학에서만 존재한다.
브로드캐스팅 연산은 한 벡터를 다른 벡터의 각 원소로 연산을 여러번 반복하는 것이다.
단계별로 살펴보면 아래와 같다. (이 부분은 ChatGPT 참고)
v = np.array([[4,5,6]]) # shape: (1, 3)
w = np.array([[10, 20, 30]]).T # shape: (3, 1)
1. 벡터 형태 확인
- v는 행벡터, 즉 1행 3열 → (1,3)
- w는 열벡터, 즉 3행 1열 → (3,1)
2. v + w 연산
브로드캐스팅 규칙은 아래와 같다.
- 각 배열의 shape를 오른쪽부터 비교
- 차원이 맞지 않으면 1인 차원을 늘린다.
- 두 차원이 다르고, 둘 중 하나가 1이면, 1인 쪽을 늘려서 맞춘다.
- 첫 번째 차원: 1 vs 3 → 1인 쪽(v)을 3으로 늘림
- 두 번째 차원: 3 vs 1 → 1인 쪽(w)을 3으로 늘림
v → [[4,5,6],
[4,5,6],
[4,5,6]]
w → [[10,10,10],
[20,20,20],
[30,30,30]]
3. 최종 합산
v + w = [[ 4+10, 5+10, 6+10],
[ 4+20, 5+20, 6+20],
[ 4+30, 5+30, 6+30]]
= [[14, 15, 16],
[24, 25, 26],
[34, 35, 36]]
'수학 > 선형대수' 카테고리의 다른 글
| [개발자를 위한 실전 선형대수학] 1.6. 직교벡터 분해 (0) | 2025.11.13 |
|---|---|
| [개발자를 위한 실전 선형대수학] 1.3 벡터 크기와 단위 벡터, 1.4 벡터-내적, 1.5 그 외 벡터 곱셈 (0) | 2025.11.12 |
| [개발자를 위한 실전 선형대수학] 1.1 NumPy로 벡터 생성 및 시각화하기 (0) | 2025.11.10 |
| [한 걸음씩 알아가는 선형대수학] 1.1 연립일차방정식 (0) | 2025.11.05 |
| [스터디] 선형대수 스터디를 시작하며 (0) | 2025.11.05 |