[파이썬을 활용한 선형대수학] 행렬 기본 조작 (2) Numpy 패키지 함수 (stack, transpose, property, Norm, dot)
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 벡터로 간주 |
적용 대상 | 벡터와 행렬 모두 가능 | 벡터 내적 전용 |