biotechknowledge

[파이썬을 활용한 선형대수학] 행렬 기본 조작 (2) Numpy 패키지 함수 (stack, transpose, property, Norm, dot) 본문

IT.DT

[파이썬을 활용한 선형대수학] 행렬 기본 조작 (2) Numpy 패키지 함수 (stack, transpose, property, Norm, dot)

준2준2 2024. 12. 22. 19:52

 

https://www.inflearn.com/course/%EC%84%A0%ED%98%95%EB%8C%80%EC%88%98%ED%95%99/dashboard

 

파이썬을 활용한 선형대수학 - NumPy와 SciPy의 활용 강의 | 조범희 (타블렛깎는노인) - 인프런

조범희 (타블렛깎는노인) | 이 강좌에서는 파이썬의 SciPy 라이브러리를 활용하여 다양한 행렬계산 관련 문제들을 푸는 방법을 배웁니다.파이썬을 몰라도, 선대개 지식이 얕아도 주어진 문제를

www.inflearn.com

 

 

np.hstack() / np.vstack()

1D array 의 stack의 경우 hstack과 vstack 의 결과가 다르다. 매개변수를  tuple 형태로 받는다.

 

1D,2D vector가 혼합되어 있는겨우는 vstack만 가능하다.

 

transpose / T method

transpose는 Numpy 객체의 매서드이다.  T는 Numpy 객체의 속성이다. 속성(property)는 python 클래스의 속성으로, 함수처럼 호출하지 않고 마치 데이터처럼 접근할 수 있다.

 

real property / imag property / conjugate method

conjugate은 허수부분 부호를 반전시킨 값을 의미한다.

 

Scalar multiplication

실수값 X 행렬

 

Matrix multiplication

행렬 X 행렬

 

Matrix-vector product

 

Inner Product (내적)

복소수 벡터의 경우, 일반적인 내적 계산법에 *복소수 켤레* 를 추가한다. 복소수 켤레란 복소수의 허수 부분의 부호를 바꾼 것이다. 실수 벡터를 dot 함수를 사용했을 때 일반적인 내적연산을 따른다. complex 벡터를 dot하면 단순히 두 벡터를 곱해서 더하기 것으로 복소수의 내적의 정의와 다르다.

# 수학적으로 옳은 의미의 복소수벡터의 내적
correct_inner_product = np.dot(np.conjugate(u), v)

 

 

Norm

벡터의 norm에는 l1,l2,l-infinite 가 있다. l1-norm은 맨허튼 거리기반으로 벡터 각 성분의 절대값을 더한 값이다. l2-norm은 유클리드 거리기반으로  원점에서 해당 벡터 위치까지의 직선거리이다. l-infinite norm은 벡터 성분 중 절대값이 가장 큰 값이다. 

Matrix norm

l1-Matrix 행렬의 열방향으로 가장 큰 합을 구한다. 각각의 성분은 절대값 취하여 더한다. l2-matrix는 행렬의 최대 특이값을 사용한다. 최대 특이값이란 행령 A의 특이값 분해(SVD)에서 가장 큰 값이다. l-infinite matrix 는 각 행의 절대값 합 중에서 가장 큰 값이다.

 

 

인덱싱을 할 때 어떻게 방법에 따라 2D array나 1D array로 저장할 수 있다. 1D array의 결과만 봐서는 행을 가져온건지 열을 가져온지 알 수 없다.

A = np.array([
    [1,2,3,4,5],
    [6,7,8,9,10],
    [11,12,13,14,15],
    [-1,-2,-3,-4,-5]
])

v1 = A[:,1]
v2 = A[:,2]
v3 = A[:,3]

B = np.vstack((v1,v2,v3))

mat_vec = np.matmul(B,v1)

A = np.array([
    [1,2],
    [3,4]
])
# 행렬곱 이용하기
x = np.array([5,6])
x = np.reshape(x,(2,1))
np.matmul(np.matmul(x.T, A), x)

#dot 이용하기
np.dot(x.T, np.dot(A,x))

 

 

np.dot은 일반적인 행렬 곱셈이나 벡터 내적을 계산한다. np.vdot은 복소수 배열을 지원하는 함수이다.

 

특징 np.dot np.vdot
기능 벡터 내적, 행렬 곱, 또는 고차원 배열 곱 항상 벡터 내적만 수행
복소수 지원 여부 복소수 계산 시, 켤레 복소수를 사용하지 않음 첫 번째 배열의 켤레 복소수를 사용
차원 처리 차원에 따라 동작이 달라짐 (1D: 내적, 2D: 행렬 곱) 두 배열을 항상 1D 벡터로 간주
적용 대상 벡터와 행렬 모두 가능 벡터 내적 전용