혼자 공부/선형대수학

벡터1

왕초보코딩러 2025. 3. 3. 20:27
728x90

https://product.kyobobook.co.kr/detail/S000209345747?utm_source=google&utm_medium=cpc&utm_campaign=googleSearch&gt_network=g&gt_keyword=&gt_target_id=aud-901091942354:dsa-608444978378&gt_campaign_id=9979905549&gt_adgroup_id=132556570510&gad_source=1

 

개발자를 위한 실전 선형대수학(파이썬 3.10 버전 대응, 구글 코랩 실습 가능) | 마이크 X 코헨 - 교

개발자를 위한 실전 선형대수학(파이썬 3.10 버전 대응, 구글 코랩 실습 가능) | 복잡한 증명과 수식 없이 파이썬을 이용해 직관적으로 배우는 선형대수학 * 연습문제 + 해답 + 해설 강의, 무료 샘

product.kyobobook.co.kr


 

스칼라

크기만 가지고 방향이 없는 값

 

벡터란

크기와 방향을 모두 가지며, 순서대로 나열된 수의 목록

 

Numpy 라이브러리 임포트

import numpy as np

 

벡터 생성

arr = np.array([1,2,3]) # 1차원 배열(방향이 없음)
row_vec = np.array([ [1,2,3] ]) # 행 벡터
col_vec = np.array([ [1],[2],[3] ]) # 열 벡터

 

벡터의 차원(행렬의 차원)

 

벡터의 덧셈, 뺄셈, 곱셈(아다마르곱)

대응대는 원소끼리 연산

차원이 일치해야 한다

# 리스트
a = [1,2,3]
b = [4,5,6]

print(a + b) # 리스트 연결
print(np.array(a) + np.array(b)) # 벡터의 덧셈

 

스칼라-벡터 곱셈

각 벡터의 원소에 스칼라 값을 곱한다

a = [1,2,3] # 리스트
s = 2 # 스칼라

print(a * s) # 리스트 반복
print(np.array(a) * s) # 스칼라-벡터 곱셈

 

넘파이에서의 스칼라-벡터 덧셈

브로드캐스팅을 통해

a = [1,2,3] # 리스트
s = 2 # 스칼라

print(np.array(a) + s) # 스칼라-벡터 덧셈

   [1, 2, 3]  # 1차원 배열
+ [2, 2, 2]  # 브로드캐스팅
-------------
   [3, 4, 5]  # 결과

 

벡터의 전치 연산(transpose)

열벡터 <-> 행벡터

벡터를 두 번 전치하면 다시 자기 자신이 된다.

 

row_vec = np.array([ [1,2,3] ])
col_vec = np.array([ [1,2,3] ]).T # 전치  
# np.transpose( np.array([ [1,2,3] ]) )와 같음

row_vec, col_vec

열벡터 만들 때 대괄호의 수를 줄이기 위해 먼저 행벡터로 만든 다음 전치하여 열벡터로 변환한다

 

벡터 노름

벡터의 노름 = 벡터의 크기

유클리드 거리 공식(벡터 원소들의 제곱합에 제곱근)을 통해 구한다

 

# 벡터의 노름 구하기
v = np.array([ [1,2,3] ])
print(np.linalg.norm(v))
print(np.sqrt(np.sum(v**2))) # 제곱해서 더한 것에 제곱근을 취함

 

단위벡터(Unit vector)

노름이 1인 벡터

 

단위벡터 만드는 법

벡터에 벡터 노름의 역수(스칼라)를 곱한다

 

# 단위벡터 구하기
v = np.array([1,2,3])
norm = np.linalg.norm(v)
u = v/norm
u

 

벡터-내적

내적(dot product): 두 벡터 사이의 관계를 숫자로 나타내는 것

차원이 일치해야 한다

1. 대수적 정의

두 벡터에 대응되는 원소끼리 곱한 다음 합한다

 

전치 연산을 이용한 내적 공식

 

자기 자신 내적하면 노름의 제곱이 된다

내적을 이용한 노름 표현

 

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

print(np.dot(a,b))
print(np.sum(a*b))

 

 

2. 기하학적 정의

a의 b로의 정사영의 길이에 b의 크기를 곱한 것

(=벡터 a의 변화를 벡터 b가 얼만큼 설명해줄 수 있는가)

자기 자신을 내적하면 노름의 제곱

 

 

 

a와 b의 노름은 항상 양수이므로 코사인 값에 따라 양/음이 나뉜다

코사인 값 -1 ~ 1 사이

둘이 같은 방향일 때 1

둘이 반대 방향일 때 -1

 

직교일 때(90도) 코사인 값은 0

기하학적 내적 공식에 따라 직교 벡터의 내적은 0

-> 내적이 0이다 = 직교한다

 

내적(dot product): 두 벡터 사이의 관계를 숫자로 나타내는 것(유사성 척도로 사용)

벡터에 스칼라를 곱하면 내적도 그만큼 커진다

그러나 벡터의 크기가 크면 내적이 크게 나올 수 있으므로 정확한 유사성 판단이 불가하다

-> 정규화 해준다(벡터의 크기를 1로 만들어 벡터의 방향만 비교할 수 있게 한다)

 

내적의 분배 법칙

둘이 같기 때문에

a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.array([7,8,9])

print(np.dot(a, b+c))
print(np.dot(a,b) + np.dot(a,c))

 

내적의 교환 법칙

 

둘이 같기 때문에

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

print(np.sum(a*b))
print(np.sum(b*a))

 

'혼자 공부 > 선형대수학' 카테고리의 다른 글

상관관계와 코사인 유사도  (0) 2025.03.18
벡터2  (0) 2025.03.07
직교벡터 분해  (0) 2025.03.05