Datascience/Linear Algebra

1장 연습문제

hchanryu 2024. 1. 22. 19:37

 

개발자를 위한 실전 선형대수학(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
벡터의 제곱 노름을 그 벡터 자체의 내적으로 계산할 수 있습니다.