Datascience/Linear Algebra

[개발자를 위한 실전 선형대수학] 행렬과 행렬의 기본 연산

hchanryu 2024. 1. 21. 14:27

 

개발자를 위한 실전 선형대수학(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()

 

matplotlib을 이용한 행렬 시각화

 

특수 행렬

행렬의 숫자를 구성하는 무한한 방법이 있기 때문에 행렬은 그 종류가 다양함

 

난수 행렬(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)

행렬 곱셈은 "내부" 차원의 수가 일차할 때만 유효하고, 곱셈 행렬의 크기는 "외부" 차원의 수로 정의된다.