개발자를 위한 실전 선형대수학(Practical Linear Algebra for Data Science)
1장 벡터, 파트 1 : 벡터와 벡터의 기본 연산 연습문제
연습문제 1-2
아래 식을 코드로 변환해서 벡터 노름을 계산하는 알고리즘을 작성합니다. 차원과 방향이 다른 난수 벡터를 사용해서 np.linalg.norm과 동일한 결과를 얻는지 확인합니다.
vec = np.array(np.random.randn(5))
def norm_Vec(vec):
len_vec = len(vec)
a = 0
for i in np.arange(len_vec):
a = a + vec[i]**2
norm = a**0.5
return norm
vec
#array([-0.08695681, -0.17306018, 1.16968435, 0.73906329, -0.64840336])
np.linalg.norm(vec)
#2.830739709413444
norm_Vec(vec)
#2.830739709413444
#부록 답안
# the function
def normOfVect(v):
return np.sqrt(np.sum(v**2))
# test it on a unit-norm vector
w = np.array([0,0,1])
print( normOfVect(w) )
# non-unit-norm vector, and confirm using np.linalg.norm
w = np.array([1,2,3])
print( normOfVect(w),np.linalg.norm(w) )
연습문제 1-3
벡터를 입력으로 받아 동일한 방향의 단위 벡터를 출력하는 파이썬 함수를 구현합니다. 영벡터를 입력하면 어떻게 될까요?
vec = np.array(np.random.randn(5))
def unit_vec(vec):
norm = np.linalg.norm(vec)
unit_vec = (1/norm) * vec
return unit_vec
a= unit_vec(vec)
연습문제 1-5
np.transpose(v) 또는 v.T와 같은 내장함수 또는 메서드를 사용하지 않고 행벡터를 열벡터로 전치하는 for 루프를 작성합니다. 이 실습을 통해 방향을 가진 벡터를 생성하고 인덱싱하는 법을 배울 수 있습니다.
# the row vector to transpose
v = np.array([[1,2,3]])
# initialize the column vector
vt = np.zeros((3,1))
# direct implementation of the formula using a for loop
for i in range(v.shape[1]):
vt[i,0] = v[0,i]
# confirm!
print(v), print(' ')
print(vt)
연습 문제 1-6
벡터의 제곱 노름을 그 벡터 자체의 내적으로 계산할 수 있습니다.
'Datascience > Linear Algebra' 카테고리의 다른 글
[개발자를 위한 실전 선형대수학] 행렬 응용: 데이터 분석에서의 행렬 (0) | 2024.01.25 |
---|---|
[개발자를 위한 선형대수학] 행렬의 확장 개념(2) (0) | 2024.01.24 |
[개발자를 위한 실전 선형대수학] 행렬의 확장 개념(1) (1) | 2024.01.21 |
[개발자를 위한 실전 선형대수학] 행렬과 행렬의 기본 연산 (1) | 2024.01.21 |
[개발자를 위한 실전 선형대수학] 벡터의 응용 (0) | 2024.01.21 |