개발자를 위한 실전 선형대수학(Practical Linear Algebra for Data Science)
4장 행렬, 파트 1 : 행렬과 행렬의 기본 연산
"행렬은 벡터를 한 차원 더 끌어올린 것입니다."
데이터 과학에서 다루는 행렬은 수십억 개의 원소를 가지는 대규모인 경우가 많다. 그렇기에 수식적인 표현보다는 maplotlib등의 라이브러리를 활용한 시각화 표현이 유리함.
# create some matrices
A = np.random.randn(3,4)
B = np.random.randn(100,100)
C = -toeplitz(np.arange(8),np.arange(10))
# and show them as images
fig,axs = plt.subplots(1,3,figsize=(10,3))
axs[0].imshow(A,cmap='magma')
axs[1].imshow(B,cmap='magma')
axs[2].imshow(C,cmap='magma')
for i in range(3): axs[i].axis('off')
plt.tight_layout()
plt.savefig('matrix.png')
plt.show()
특수 행렬
행렬의 숫자를 구성하는 무한한 방법이 있기 때문에 행렬은 그 종류가 다양함
난수 행렬(random numbers matrix) : 일반적으로 가우스(정규)와 같은 분포로부터 무작위로 추출된 숫자를 가진 행렬
(선형대수학을 코드로 공부할 때 유용함, 임의의 크기와 계수로 쉽고 빠르게 생성 가능해서)
#Random Numbers Matrix
RNM = np.random.randn(4,6)
정방 행렬(square matrix)와 비정방 행렬(nonsquare matrix):
- 정방 행렬은 행의 수와 열 수가 같음
대각 행렬(diagonal matrix)
# diagonal, 0~6의 수를 랜덤으로 원소로 가지는 대각 행렬
M4 = np.diag( np.random.randint(0,6,size=8) )
삼각 행렬(triangular matrix)
- 주 대각선의 위 또는 아래가 모두 0인 행렬
# upper-triangular square
UTS = np.triu(np.random.randint(10,20,(3,3)))
# lower-triangular rectangular
LTS = np.tril(np.random.randint(8,16,(3,5)))
단위 행렬(identity matrix)
-모든 대각 원소가 1인 정방 대각 행렬, 행렬 또는 벡터에 단위 행렬을 곱하면 동일한 행렬 또는 벡터가 된다.
행렬 수학: 덧셈, 스칼라 곱셈, 아다마르곱
덧셈과 뺄셈
- 대응하는 원소끼리 연산을 진행함(당연하게 벡터의 연산과 동일)
행렬의 이동
- 벡터와 마찬가지로 행렬에서도 스칼라 값을 더할 수 없음, 스칼라와 행렬의 연산은 다음과 같다
- 브로드캐스팅 연산(당연히 선형대수학 연산은 아니다)
- 행렬 이동(shifting a matrix) - 정방 행렬에 스칼라 더하기
행렬 이동(shifiting a matrix): 대각에 상숫값을 더하는 것과 같이 단위 행렬에 스칼라를 곱해서 더하는 방식으로 구현
행렬을 이동하면, 대각 원소만 변경되고 나머지는 그대로이다.
행렬의 곱
- 스칼라-행렬 곱셈 : 행렬의 각 원소에 동일한 스칼라를 곱함
- 아다마르곱: 서로 대응한 원소들을 곱함
A = np.random.randn(3,4)
B = np.random.randn(3,4)
#Hadamard product *을 이용
A*B
#Hadamard product np.multiply()을 이용
np.multiply(A, B)
-(표준) 행렬 곱셈(matrix multiplication)
행렬 곱셈은 "내부" 차원의 수가 일차할 때만 유효하고, 곱셈 행렬의 크기는 "외부" 차원의 수로 정의된다.
'Datascience > Linear Algebra' 카테고리의 다른 글
1장 연습문제 (1) | 2024.01.22 |
---|---|
[개발자를 위한 실전 선형대수학] 행렬의 확장 개념(1) (1) | 2024.01.21 |
[개발자를 위한 실전 선형대수학] 벡터의 응용 (0) | 2024.01.21 |
[개발자를 위한 실전 선형대수학] 벡터의 확장 개념 (0) | 2024.01.14 |
[개발자를 위한 실전 선형대수학] 벡터와 기본 연산 (0) | 2024.01.14 |